Skip to content

Instantly share code, notes, and snippets.

@sharanry
Last active December 20, 2019 14:48
Show Gist options
  • Save sharanry/2e9d401b3e16046fc89559d1a2ab79b2 to your computer and use it in GitHub Desktop.
Save sharanry/2e9d401b3e16046fc89559d1a2ab79b2 to your computer and use it in GitHub Desktop.
Turing HMC vs Gen MH & SMC
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"using Turing\n",
"using Gen\n",
"using MacroTools\n",
"using MacroTools: prettify\n",
"using StatsPlots\n",
"using Statistics\n",
"using MCMCDiagnostics\n",
"using StatsBase"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"N = 100\n",
"σ = 3\n",
"μ = 9\n",
"Y = μ .+ σ*randn(N);"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
"<defs>\n",
" <clipPath id=\"clip7200\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<path clip-path=\"url(#clip7200)\" d=\"\n",
"M0 1600 L2400 1600 L2400 0 L0 0 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip7201\">\n",
" <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<path clip-path=\"url(#clip7200)\" d=\"\n",
"M140.517 1487.47 L2352.76 1487.47 L2352.76 47.2441 L140.517 47.2441 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip7202\">\n",
" <rect x=\"140\" y=\"47\" width=\"2213\" height=\"1441\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 262.194,1487.47 262.194,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 754.415,1487.47 754.415,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1246.64,1487.47 1246.64,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1738.86,1487.47 1738.86,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 2231.08,1487.47 2231.08,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 140.517,1446.71 2352.76,1446.71 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 140.517,1107.04 2352.76,1107.04 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 140.517,767.359 2352.76,767.359 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 140.517,427.682 2352.76,427.682 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 140.517,88.0053 2352.76,88.0053 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 140.517,1487.47 2352.76,1487.47 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 140.517,1487.47 140.517,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 262.194,1487.47 262.194,1465.87 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 754.415,1487.47 754.415,1465.87 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1246.64,1487.47 1246.64,1465.87 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1738.86,1487.47 1738.86,1465.87 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2231.08,1487.47 2231.08,1465.87 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 140.517,1446.71 173.7,1446.71 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 140.517,1107.04 173.7,1107.04 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 140.517,767.359 173.7,767.359 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 140.517,427.682 173.7,427.682 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 140.517,88.0053 173.7,88.0053 \n",
" \"/>\n",
"<g clip-path=\"url(#clip7200)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 262.194, 1541.47)\" x=\"262.194\" y=\"1541.47\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7200)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 754.415, 1541.47)\" x=\"754.415\" y=\"1541.47\">5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7200)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1246.64, 1541.47)\" x=\"1246.64\" y=\"1541.47\">10</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7200)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1738.86, 1541.47)\" x=\"1738.86\" y=\"1541.47\">15</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7200)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 2231.08, 1541.47)\" x=\"2231.08\" y=\"1541.47\">20</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7200)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 116.517, 1464.21)\" x=\"116.517\" y=\"1464.21\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7200)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 116.517, 1124.54)\" x=\"116.517\" y=\"1124.54\">5</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7200)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 116.517, 784.859)\" x=\"116.517\" y=\"784.859\">10</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7200)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 116.517, 445.182)\" x=\"116.517\" y=\"445.182\">15</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip7200)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 116.517, 105.505)\" x=\"116.517\" y=\"105.505\">20</text>\n",
"</g>\n",
"<path clip-path=\"url(#clip7202)\" d=\"\n",
"M262.194 1378.78 L262.194 1446.71 L459.082 1446.71 L459.082 1378.78 L262.194 1378.78 L262.194 1378.78 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 262.194,1378.78 262.194,1446.71 459.082,1446.71 459.082,1378.78 262.194,1378.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip7202)\" d=\"\n",
"M459.082 1107.04 L459.082 1446.71 L655.971 1446.71 L655.971 1107.04 L459.082 1107.04 L459.082 1107.04 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 459.082,1107.04 459.082,1446.71 655.971,1446.71 655.971,1107.04 459.082,1107.04 \n",
" \"/>\n",
"<path clip-path=\"url(#clip7202)\" d=\"\n",
"M655.971 563.553 L655.971 1446.71 L852.859 1446.71 L852.859 563.553 L655.971 563.553 L655.971 563.553 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 655.971,563.553 655.971,1446.71 852.859,1446.71 852.859,563.553 655.971,563.553 \n",
" \"/>\n",
"<path clip-path=\"url(#clip7202)\" d=\"\n",
"M852.859 88.0053 L852.859 1446.71 L1049.75 1446.71 L1049.75 88.0053 L852.859 88.0053 L852.859 88.0053 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 852.859,88.0053 852.859,1446.71 1049.75,1446.71 1049.75,88.0053 852.859,88.0053 \n",
" \"/>\n",
"<path clip-path=\"url(#clip7202)\" d=\"\n",
"M1049.75 223.876 L1049.75 1446.71 L1246.64 1446.71 L1246.64 223.876 L1049.75 223.876 L1049.75 223.876 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1049.75,223.876 1049.75,1446.71 1246.64,1446.71 1246.64,223.876 1049.75,223.876 \n",
" \"/>\n",
"<path clip-path=\"url(#clip7202)\" d=\"\n",
"M1246.64 223.876 L1246.64 1446.71 L1443.52 1446.71 L1443.52 223.876 L1246.64 223.876 L1246.64 223.876 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1246.64,223.876 1246.64,1446.71 1443.52,1446.71 1443.52,223.876 1246.64,223.876 \n",
" \"/>\n",
"<path clip-path=\"url(#clip7202)\" d=\"\n",
"M1443.52 563.553 L1443.52 1446.71 L1640.41 1446.71 L1640.41 563.553 L1443.52 563.553 L1443.52 563.553 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1443.52,563.553 1443.52,1446.71 1640.41,1446.71 1640.41,563.553 1443.52,563.553 \n",
" \"/>\n",
"<path clip-path=\"url(#clip7202)\" d=\"\n",
"M1640.41 903.23 L1640.41 1446.71 L1837.3 1446.71 L1837.3 903.23 L1640.41 903.23 L1640.41 903.23 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1640.41,903.23 1640.41,1446.71 1837.3,1446.71 1837.3,903.23 1640.41,903.23 \n",
" \"/>\n",
"<path clip-path=\"url(#clip7202)\" d=\"\n",
"M1837.3 1242.91 L1837.3 1446.71 L2034.19 1446.71 L2034.19 1242.91 L1837.3 1242.91 L1837.3 1242.91 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1837.3,1242.91 1837.3,1446.71 2034.19,1446.71 2034.19,1242.91 1837.3,1242.91 \n",
" \"/>\n",
"<path clip-path=\"url(#clip7202)\" d=\"\n",
"M2034.19 1378.78 L2034.19 1446.71 L2231.08 1446.71 L2231.08 1378.78 L2034.19 1378.78 L2034.19 1378.78 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip7202)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2034.19,1378.78 2034.19,1446.71 2231.08,1446.71 2231.08,1378.78 2034.19,1378.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip7200)\" d=\"\n",
"M1989.93 251.724 L2280.76 251.724 L2280.76 130.764 L1989.93 130.764 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1989.93,251.724 2280.76,251.724 2280.76,130.764 1989.93,130.764 1989.93,251.724 \n",
" \"/>\n",
"<path clip-path=\"url(#clip7200)\" d=\"\n",
"M2013.93 215.436 L2157.93 215.436 L2157.93 167.052 L2013.93 167.052 L2013.93 215.436 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip7200)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2013.93,215.436 2157.93,215.436 2157.93,167.052 2013.93,167.052 2013.93,215.436 \n",
" \"/>\n",
"<g clip-path=\"url(#clip7200)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;\" transform=\"rotate(0, 2181.93, 208.744)\" x=\"2181.93\" y=\"208.744\">y1</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"histogram(Y, )"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"quote\n",
" σ ~ exponential(1)\n",
" μ ~ normal(0, 100)\n",
" for i = 1:N\n",
" y[i] ~ normal(μ, σ)\n",
" end\n",
"end"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"prog = quote\n",
" σ ~ exponential(1)\n",
" μ ~ normal(0, 100)\n",
" for i in 1:N\n",
" y[i] ~ normal(μ, σ)\n",
" end\n",
" end |> prettify"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"stan_to_gen (generic function with 1 method)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function stan_to_gen(prog; model_name=\"model\", data=[], ret=nothing)\n",
" prog = prog |> prettify\n",
" new_expr = Expr(:function)\n",
" append!(new_expr.args, [Expr(:call, Symbol(model_name), data...)])\n",
" append!(new_expr.args, [Expr(:block)])\n",
" for line in prog.args\n",
" if @capture(line, a_ = b_)\n",
" append!(new_expr.args[2].args, [line])\n",
" end\n",
" if @capture(line, a_ ~ b_)\n",
" if @capture(b, normal(mu_, sig_))\n",
" symbol = QuoteNode(a)\n",
" append!(new_expr.args[2].args, [:($a = @trace($b, $symbol))])\n",
" continue\n",
" end\n",
" \n",
" if @capture(b, exponential(lambda_))\n",
" symbol = QuoteNode(a)\n",
" append!(new_expr.args[2].args, [:($a = @trace($b, $symbol))])\n",
" continue\n",
" end\n",
" \n",
" elseif line.head==:for\n",
" inner_block = line.args[2]\n",
" inner_expr = Expr(line.head, line.args[1], Expr(:block))\n",
" if inner_block.head != :block\n",
" inner_block = [inner_block]\n",
" else\n",
" inner_block = inner_block.args\n",
" end\n",
" for inner_line in inner_block\n",
" if @capture(inner_line, a_ ~ b_)\n",
" if a.head == :ref\n",
" symbol = QuoteNode(a.args[1])\n",
" else\n",
" symbol = QuoteNode(a)\n",
" end\n",
" if @capture(b, normal(mu_, sig_))\n",
" append!(inner_expr.args[2].args, [:(@trace($b, ($symbol, i)))])\n",
" continue\n",
" end\n",
" end\n",
" end\n",
" append!(new_expr.args[2].args, [inner_expr])\n",
" end\n",
" \n",
" end\n",
" if ret != nothing\n",
" append!(new_expr.args[2].args, [Expr(:return, ret)])\n",
" end\n",
" new_call = Expr(:macrocall, Symbol(\"@gen\"), nothing, new_expr)\n",
" println(new_call |> prettify)\n",
" eval(new_call |> prettify)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"@gen function model()\n",
" σ = @trace(exponential(1), :σ)\n",
" μ = @trace(normal(0, 100), :μ)\n",
" for i = 1:N\n",
" @trace normal(μ, σ) (:y, i)\n",
" end\n",
" end\n"
]
},
{
"data": {
"text/plain": [
"DynamicDSLFunction{Any}(Dict{Symbol,Any}(), Dict{Symbol,Any}(), Type[], ##model#368, Bool[], false)"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stan_to_gen(prog; data=[])"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"stan_to_turing (generic function with 1 method)"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function stan_to_turing(prog; model_name=\"model\", data=[], ret=nothing)\n",
" prog = prog |> prettify\n",
" new_expr = Expr(:function)\n",
" append!(new_expr.args, [Expr(:call, Symbol(model_name), data...)])\n",
" append!(new_expr.args, [Expr(:block)])\n",
" for line in prog.args\n",
" if @capture(line, a_ = b_)\n",
" append!(new_expr.args[2].args, [line])\n",
" end\n",
" if @capture(line, a_ ~ b_)\n",
" if @capture(b, normal(mu_, sig_))\n",
" symbol = QuoteNode(a)\n",
" append!(new_expr.args[2].args, [:($a ~ Normal($mu, $sig))])\n",
" continue\n",
" end\n",
" \n",
" if @capture(b, exponential(lambda_))\n",
" symbol = QuoteNode(a)\n",
" append!(new_expr.args[2].args, [:($a ~ Exponential($lambda))])\n",
" continue\n",
" end\n",
" \n",
" elseif line.head==:for\n",
" inner_block = line.args[2]\n",
" inner_expr = Expr(line.head, line.args[1], Expr(:block))\n",
" if inner_block.head != :block\n",
" inner_block = [inner_block]\n",
" else\n",
" inner_block = inner_block.args\n",
" end\n",
" for inner_line in inner_block\n",
" if @capture(inner_line, a_ ~ b_)\n",
" if a.head == :ref\n",
" symbol = QuoteNode(a.args[1])\n",
" else\n",
" symbol = QuoteNode(a)\n",
" end\n",
" if @capture(b, normal(mu_, sig_))\n",
" append!(inner_expr.args[2].args, [:($a ~ Normal($mu, $sig))])\n",
" continue\n",
" end\n",
" end\n",
" end\n",
" append!(new_expr.args[2].args, [inner_expr])\n",
" end\n",
" \n",
" end\n",
" if ret != nothing\n",
" append!(new_expr.args[2].args, [Expr(:return, ret)])\n",
" end\n",
" new_call = Expr(:macrocall, Symbol(\"@model\"), nothing, new_expr)\n",
" println(new_call |> prettify)\n",
" eval(new_call |> prettify)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"@model function turing_model(y, N)\n",
" σ ~ Exponential(1)\n",
" μ ~ Normal(0, 100)\n",
" for i = 1:N\n",
" y[i] ~ Normal(μ, σ)\n",
" end\n",
" return y\n",
" end\n"
]
},
{
"data": {
"text/plain": [
"turing_model (generic function with 3 methods)"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"stan_to_turing(prog; model_name=\"turing_model\", data=[:y, :N], ret=:y)"
]
},
{
"cell_type": "code",
"execution_count": 317,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"infer_turing_hmc (generic function with 2 methods)"
]
},
"execution_count": 317,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function infer_turing_hmc(my_model, y, n_samples)\n",
" Distribution = Turing.Distribution\n",
" turing_trace = sample(my_model(y, N), HMC(0.05, 10), n_samples; verbose=false, progress=false)\n",
" trace = Dict()\n",
" trace[:μ] = reshape(turing_trace[[:μ]].value.data, (n_samples))\n",
" trace[:σ] = reshape(turing_trace[[:σ]].value.data, (n_samples))\n",
" return trace\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 318,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((8.918890428560008, 3.0854815796031008), 8.92825758016632, 3.09775760694777)"
]
},
"execution_count": 318,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"turing_trace = infer_turing_hmc(turing_model, Y, 1000);\n",
"(mean(turing_trace[:μ]), mean(turing_trace[:σ])), mean(Y), std(Y)"
]
},
{
"cell_type": "code",
"execution_count": 128,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"infer_gen_mh (generic function with 1 method)"
]
},
"execution_count": 128,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function infer_gen_mh(my_model, y::Vector{Float64}, num_iters::Int)\n",
" # Create a set of constraints fixing the \n",
" # y coordinates to the observed y values\n",
" constraints = choicemap()\n",
" out_trace = Dict()\n",
" out_trace[:σ] = []\n",
" out_trace[:μ] = []\n",
" \n",
" for (i, yi) in enumerate(y)\n",
" constraints[(:y, i)] = yi\n",
" end\n",
" (trace, _) = generate(my_model, (), constraints)\n",
" for _ in 1:num_iters\n",
" (trace, _) = mh(trace, select(:σ))\n",
" (trace, _) = mh(trace, select(:μ))\n",
" choices = get_choices(trace)\n",
" append!(out_trace[:σ], (choices[:σ]))\n",
" append!(out_trace[:μ], (choices[:μ]))\n",
" end\n",
" return out_trace\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 297,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"infer_gen_smc (generic function with 1 method)"
]
},
"execution_count": 297,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function infer_gen_smc(my_model, y::Vector{Float64}, num_samples::Int)\n",
" # Create a set of constraints fixing the \n",
" # y coordinates to the observed y values\n",
" out_trace = Dict()\n",
" out_trace[:σ] = []\n",
" out_trace[:μ] = []\n",
" init_constraints = choicemap()\n",
" \n",
" for (i, yi) in enumerate(y)\n",
" init_constraints[(:y, i)] = yi\n",
" end\n",
" state = Gen.initialize_particle_filter(my_model, (), init_constraints, 5000)\n",
" traces = Gen.sample_unweighted_traces(state, num_samples)\n",
" trace = Dict()\n",
" trace[:μ] = [traces[i][:μ] for i=1:length(traces)]\n",
" trace[:σ] = [traces[i][:σ] for i=1:length(traces)]\n",
" trace\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 298,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((9.284254745292289, 2.9782889955337515), 8.92825758016632, 3.09775760694777)"
]
},
"execution_count": 298,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trace = infer_gen_smc(model, Y, 1000)\n",
"(mean(trace[:μ]), mean(trace[:σ])), mean(Y), std(Y)"
]
},
{
"cell_type": "code",
"execution_count": 299,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((8.77389110818249, 3.1994190197437042), 8.92825758016632, 3.09775760694777)"
]
},
"execution_count": 299,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trace = infer_gen_mh(model, Y, 1000)\n",
"(mean(trace[:μ]), mean(trace[:σ])), mean(Y), std(Y)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Simulation Based Calibration"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"using Distributions"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"generate_samples_from_prior (generic function with 1 method)"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function generate_samples_from_prior(n_samples)\n",
" σ = rand(Exponential(1), n_samples)\n",
" μ = rand(Normal(0, 1), n_samples)\n",
" return Dict(:σ => σ, :μ => μ)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 308,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"conditioned_generator_turing (generic function with 2 methods)"
]
},
"execution_count": 308,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function conditioned_generator_turing(Θ, my_model, N)\n",
"# Couldn't find any easy way to do this\n",
" ys = []\n",
" for i=1:length(Θ[collect(keys(Θ))[1]])\n",
" append!(ys, [rand(Normal(Θ[:μ][i], Θ[:σ][i]), N)])\n",
" end\n",
" ys\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 312,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"conditioned_generator_gen (generic function with 2 methods)"
]
},
"execution_count": 312,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function conditioned_generator_gen(Θ, my_model, N)\n",
" constraints = choicemap()\n",
" ys = []\n",
" for i=1:length(Θ[collect(keys(Θ))[1]])\n",
" for var in keys(Θ)\n",
" constraints[var] = Θ[var][i]\n",
" end\n",
" (trace, _) = generate(my_model, (), constraints)\n",
" y_ = [trace[(:y, i)] for i in 1:N]\n",
" append!(ys, [y_])\n",
" end\n",
" return ys\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 313,
"metadata": {},
"outputs": [],
"source": [
"# conditioned_generator(Dict(:μ=>[9, 90], :σ=>[3, 3]), model)"
]
},
{
"cell_type": "code",
"execution_count": 314,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"find_rank (generic function with 1 method)"
]
},
"execution_count": 314,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function find_rank(elem, array, ≺)\n",
" sort!(array, lt=≺)\n",
" rank = 0\n",
" for a in array\n",
" if elem ≺ a\n",
" break\n",
" end\n",
" rank+=1\n",
" end \n",
" return rank\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 335,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"SBC (generic function with 3 methods)"
]
},
"execution_count": 335,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function SBC(L::Int, N, conditioned_generator, my_inference_program, my_model)\n",
" ranks = []\n",
" L_dash = L\n",
" for n in 1:N\n",
" print(n, \" \")\n",
" Θ = generate_samples_from_prior(1)\n",
" ỹ = conditioned_generator(Θ, my_model, N)[1]\n",
" trace = my_inference_program(my_model, ỹ, L_dash)\n",
" ESS = effective_sample_size(trace[:μ])\n",
" if ESS<L\n",
" trace = my_inference_program(my_model, ỹ, Int(floor(L_dash*L/ESS)))\n",
" trace[:μ] = sample(trace[:μ], L)\n",
" trace[:σ] = sample(trace[:σ], L)\n",
" append!(ranks, find_rank(Θ[:μ][1], trace[:μ], <))\n",
" continue\n",
" end\n",
" append!(ranks, find_rank(Θ[:μ][1], trace[:μ], <))\n",
" end\n",
" return ranks\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 336,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Chi_Squared_Test (generic function with 1 method)"
]
},
"execution_count": 336,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function Chi_Squared_Test(ranks, m)\n",
" Obs = fit(Histogram, ranks, 0:m).weights\n",
" Exp = (length(ranks)/m)*ones(length(Obs))\n",
" sum(((Obs-Exp).^2 ./ Exp))\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"L = 50\n",
"N_ = 100\n",
"\n",
"SBC(Int(L), N_, conditioned_generator_turing, infer_turing_hmc, turing_model)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"L = 50\n",
"N_ = 100\n",
"\n",
"chis = []\n",
"for L in 100:100:1000\n",
" ranks = SBC(Int(L), N_, :hmc)\n",
" Exp = collect(Iterators.flatten([i*ones(Int(round(N_/(L+1)))) for i in 0:L]));\n",
" chi = Chi_Squared_Test(ranks, L)\n",
" println(L, \" \", chi)\n",
" append!(chis, [chi])\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
"<defs>\n",
" <clipPath id=\"clip0900\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<path clip-path=\"url(#clip0900)\" d=\"\n",
"M0 1600 L2400 1600 L2400 0 L0 0 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip0901\">\n",
" <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<path clip-path=\"url(#clip0900)\" d=\"\n",
"M113.754 1487.47 L2352.76 1487.47 L2352.76 47.2441 L113.754 47.2441 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip0902\">\n",
" <rect x=\"113\" y=\"47\" width=\"2240\" height=\"1441\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 236.904,1487.47 236.904,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 627.63,1487.47 627.63,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1018.36,1487.47 1018.36,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1409.08,1487.47 1409.08,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1799.81,1487.47 1799.81,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 2190.53,1487.47 2190.53,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 113.754,1446.71 2352.76,1446.71 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 113.754,1144.78 2352.76,1144.78 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 113.754,842.843 2352.76,842.843 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 113.754,540.908 2352.76,540.908 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 113.754,238.973 2352.76,238.973 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 113.754,1487.47 2352.76,1487.47 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 113.754,1487.47 113.754,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 236.904,1487.47 236.904,1465.87 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 627.63,1487.47 627.63,1465.87 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1018.36,1487.47 1018.36,1465.87 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1409.08,1487.47 1409.08,1465.87 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1799.81,1487.47 1799.81,1465.87 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2190.53,1487.47 2190.53,1465.87 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 113.754,1446.71 147.339,1446.71 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 113.754,1144.78 147.339,1144.78 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 113.754,842.843 147.339,842.843 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 113.754,540.908 147.339,540.908 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 113.754,238.973 147.339,238.973 \n",
" \"/>\n",
"<g clip-path=\"url(#clip0900)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 236.904, 1541.47)\" x=\"236.904\" y=\"1541.47\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip0900)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 627.63, 1541.47)\" x=\"627.63\" y=\"1541.47\">10</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip0900)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1018.36, 1541.47)\" x=\"1018.36\" y=\"1541.47\">20</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip0900)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1409.08, 1541.47)\" x=\"1409.08\" y=\"1541.47\">30</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip0900)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1799.81, 1541.47)\" x=\"1799.81\" y=\"1541.47\">40</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip0900)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 2190.53, 1541.47)\" x=\"2190.53\" y=\"1541.47\">50</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip0900)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 89.7545, 1464.21)\" x=\"89.7545\" y=\"1464.21\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip0900)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 89.7545, 1162.28)\" x=\"89.7545\" y=\"1162.28\">2</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip0900)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 89.7545, 860.343)\" x=\"89.7545\" y=\"860.343\">4</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip0900)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 89.7545, 558.408)\" x=\"89.7545\" y=\"558.408\">6</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip0900)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 89.7545, 256.473)\" x=\"89.7545\" y=\"256.473\">8</text>\n",
"</g>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M236.904 389.94 L236.904 1446.71 L275.976 1446.71 L275.976 389.94 L236.904 389.94 L236.904 389.94 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 236.904,389.94 236.904,1446.71 275.976,1446.71 275.976,389.94 236.904,389.94 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M275.976 842.843 L275.976 1446.71 L315.049 1446.71 L315.049 842.843 L275.976 842.843 L275.976 842.843 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 275.976,842.843 275.976,1446.71 315.049,1446.71 315.049,842.843 275.976,842.843 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M315.049 842.843 L315.049 1446.71 L354.121 1446.71 L354.121 842.843 L315.049 842.843 L315.049 842.843 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 315.049,842.843 315.049,1446.71 354.121,1446.71 354.121,842.843 315.049,842.843 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M354.121 1144.78 L354.121 1446.71 L393.194 1446.71 L393.194 1144.78 L354.121 1144.78 L354.121 1144.78 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 354.121,1144.78 354.121,1446.71 393.194,1446.71 393.194,1144.78 354.121,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M393.194 1144.78 L393.194 1446.71 L432.267 1446.71 L432.267 1144.78 L393.194 1144.78 L393.194 1144.78 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 393.194,1144.78 393.194,1446.71 432.267,1446.71 432.267,1144.78 393.194,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M432.267 1144.78 L432.267 1446.71 L471.339 1446.71 L471.339 1144.78 L432.267 1144.78 L432.267 1144.78 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 432.267,1144.78 432.267,1446.71 471.339,1446.71 471.339,1144.78 432.267,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M471.339 1446.71 L471.339 1446.71 L510.412 1446.71 L510.412 1446.71 L471.339 1446.71 L471.339 1446.71 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 471.339,1446.71 471.339,1446.71 510.412,1446.71 471.339,1446.71 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M510.412 993.811 L510.412 1446.71 L549.484 1446.71 L549.484 993.811 L510.412 993.811 L510.412 993.811 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 510.412,993.811 510.412,1446.71 549.484,1446.71 549.484,993.811 510.412,993.811 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M549.484 1446.71 L549.484 1446.71 L588.557 1446.71 L588.557 1446.71 L549.484 1446.71 L549.484 1446.71 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 549.484,1446.71 549.484,1446.71 588.557,1446.71 549.484,1446.71 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M588.557 691.876 L588.557 1446.71 L627.63 1446.71 L627.63 691.876 L588.557 691.876 L588.557 691.876 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 588.557,691.876 588.557,1446.71 627.63,1446.71 627.63,691.876 588.557,691.876 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M627.63 842.843 L627.63 1446.71 L666.702 1446.71 L666.702 842.843 L627.63 842.843 L627.63 842.843 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 627.63,842.843 627.63,1446.71 666.702,1446.71 666.702,842.843 627.63,842.843 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M666.702 1295.75 L666.702 1446.71 L705.775 1446.71 L705.775 1295.75 L666.702 1295.75 L666.702 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 666.702,1295.75 666.702,1446.71 705.775,1446.71 705.775,1295.75 666.702,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M705.775 1295.75 L705.775 1446.71 L744.848 1446.71 L744.848 1295.75 L705.775 1295.75 L705.775 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 705.775,1295.75 705.775,1446.71 744.848,1446.71 744.848,1295.75 705.775,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M744.848 1144.78 L744.848 1446.71 L783.92 1446.71 L783.92 1144.78 L744.848 1144.78 L744.848 1144.78 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 744.848,1144.78 744.848,1446.71 783.92,1446.71 783.92,1144.78 744.848,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M783.92 1144.78 L783.92 1446.71 L822.993 1446.71 L822.993 1144.78 L783.92 1144.78 L783.92 1144.78 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 783.92,1144.78 783.92,1446.71 822.993,1446.71 822.993,1144.78 783.92,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M822.993 993.811 L822.993 1446.71 L862.065 1446.71 L862.065 993.811 L822.993 993.811 L822.993 993.811 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 822.993,993.811 822.993,1446.71 862.065,1446.71 862.065,993.811 822.993,993.811 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M862.065 1295.75 L862.065 1446.71 L901.138 1446.71 L901.138 1295.75 L862.065 1295.75 L862.065 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 862.065,1295.75 862.065,1446.71 901.138,1446.71 901.138,1295.75 862.065,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M901.138 1295.75 L901.138 1446.71 L940.211 1446.71 L940.211 1295.75 L901.138 1295.75 L901.138 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 901.138,1295.75 901.138,1446.71 940.211,1446.71 940.211,1295.75 901.138,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M940.211 842.843 L940.211 1446.71 L979.283 1446.71 L979.283 842.843 L940.211 842.843 L940.211 842.843 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 940.211,842.843 940.211,1446.71 979.283,1446.71 979.283,842.843 940.211,842.843 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M979.283 1144.78 L979.283 1446.71 L1018.36 1446.71 L1018.36 1144.78 L979.283 1144.78 L979.283 1144.78 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 979.283,1144.78 979.283,1446.71 1018.36,1446.71 1018.36,1144.78 979.283,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1018.36 1295.75 L1018.36 1446.71 L1057.43 1446.71 L1057.43 1295.75 L1018.36 1295.75 L1018.36 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1018.36,1295.75 1018.36,1446.71 1057.43,1446.71 1057.43,1295.75 1018.36,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1057.43 1446.71 L1057.43 1446.71 L1096.5 1446.71 L1096.5 1446.71 L1057.43 1446.71 L1057.43 1446.71 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1057.43,1446.71 1057.43,1446.71 1096.5,1446.71 1057.43,1446.71 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1096.5 1295.75 L1096.5 1446.71 L1135.57 1446.71 L1135.57 1295.75 L1096.5 1295.75 L1096.5 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1096.5,1295.75 1096.5,1446.71 1135.57,1446.71 1135.57,1295.75 1096.5,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1135.57 842.843 L1135.57 1446.71 L1174.65 1446.71 L1174.65 842.843 L1135.57 842.843 L1135.57 842.843 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1135.57,842.843 1135.57,1446.71 1174.65,1446.71 1174.65,842.843 1135.57,842.843 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1174.65 1144.78 L1174.65 1446.71 L1213.72 1446.71 L1213.72 1144.78 L1174.65 1144.78 L1174.65 1144.78 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1174.65,1144.78 1174.65,1446.71 1213.72,1446.71 1213.72,1144.78 1174.65,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1213.72 993.811 L1213.72 1446.71 L1252.79 1446.71 L1252.79 993.811 L1213.72 993.811 L1213.72 993.811 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1213.72,993.811 1213.72,1446.71 1252.79,1446.71 1252.79,993.811 1213.72,993.811 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1252.79 1446.71 L1252.79 1446.71 L1291.86 1446.71 L1291.86 1446.71 L1252.79 1446.71 L1252.79 1446.71 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1252.79,1446.71 1252.79,1446.71 1291.86,1446.71 1252.79,1446.71 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1291.86 1446.71 L1291.86 1446.71 L1330.94 1446.71 L1330.94 1446.71 L1291.86 1446.71 L1291.86 1446.71 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1291.86,1446.71 1291.86,1446.71 1330.94,1446.71 1291.86,1446.71 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1330.94 1295.75 L1330.94 1446.71 L1370.01 1446.71 L1370.01 1295.75 L1330.94 1295.75 L1330.94 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1330.94,1295.75 1330.94,1446.71 1370.01,1446.71 1370.01,1295.75 1330.94,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1370.01 1295.75 L1370.01 1446.71 L1409.08 1446.71 L1409.08 1295.75 L1370.01 1295.75 L1370.01 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1370.01,1295.75 1370.01,1446.71 1409.08,1446.71 1409.08,1295.75 1370.01,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1409.08 1446.71 L1409.08 1446.71 L1448.15 1446.71 L1448.15 1446.71 L1409.08 1446.71 L1409.08 1446.71 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1409.08,1446.71 1409.08,1446.71 1448.15,1446.71 1409.08,1446.71 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1448.15 1295.75 L1448.15 1446.71 L1487.23 1446.71 L1487.23 1295.75 L1448.15 1295.75 L1448.15 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1448.15,1295.75 1448.15,1446.71 1487.23,1446.71 1487.23,1295.75 1448.15,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1487.23 1446.71 L1487.23 1446.71 L1526.3 1446.71 L1526.3 1446.71 L1487.23 1446.71 L1487.23 1446.71 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1487.23,1446.71 1487.23,1446.71 1526.3,1446.71 1487.23,1446.71 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1526.3 1295.75 L1526.3 1446.71 L1565.37 1446.71 L1565.37 1295.75 L1526.3 1295.75 L1526.3 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1526.3,1295.75 1526.3,1446.71 1565.37,1446.71 1565.37,1295.75 1526.3,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1565.37 1295.75 L1565.37 1446.71 L1604.45 1446.71 L1604.45 1295.75 L1565.37 1295.75 L1565.37 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1565.37,1295.75 1565.37,1446.71 1604.45,1446.71 1604.45,1295.75 1565.37,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1604.45 1446.71 L1604.45 1446.71 L1643.52 1446.71 L1643.52 1446.71 L1604.45 1446.71 L1604.45 1446.71 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1604.45,1446.71 1604.45,1446.71 1643.52,1446.71 1604.45,1446.71 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1643.52 1295.75 L1643.52 1446.71 L1682.59 1446.71 L1682.59 1295.75 L1643.52 1295.75 L1643.52 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1643.52,1295.75 1643.52,1446.71 1682.59,1446.71 1682.59,1295.75 1643.52,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1682.59 1446.71 L1682.59 1446.71 L1721.66 1446.71 L1721.66 1446.71 L1682.59 1446.71 L1682.59 1446.71 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1682.59,1446.71 1682.59,1446.71 1721.66,1446.71 1682.59,1446.71 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1721.66 1295.75 L1721.66 1446.71 L1760.74 1446.71 L1760.74 1295.75 L1721.66 1295.75 L1721.66 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1721.66,1295.75 1721.66,1446.71 1760.74,1446.71 1760.74,1295.75 1721.66,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1760.74 993.811 L1760.74 1446.71 L1799.81 1446.71 L1799.81 993.811 L1760.74 993.811 L1760.74 993.811 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1760.74,993.811 1760.74,1446.71 1799.81,1446.71 1799.81,993.811 1760.74,993.811 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1799.81 993.811 L1799.81 1446.71 L1838.88 1446.71 L1838.88 993.811 L1799.81 993.811 L1799.81 993.811 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1799.81,993.811 1799.81,1446.71 1838.88,1446.71 1838.88,993.811 1799.81,993.811 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1838.88 1295.75 L1838.88 1446.71 L1877.95 1446.71 L1877.95 1295.75 L1838.88 1295.75 L1838.88 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1838.88,1295.75 1838.88,1446.71 1877.95,1446.71 1877.95,1295.75 1838.88,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1877.95 1446.71 L1877.95 1446.71 L1917.03 1446.71 L1917.03 1446.71 L1877.95 1446.71 L1877.95 1446.71 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1877.95,1446.71 1877.95,1446.71 1917.03,1446.71 1877.95,1446.71 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1917.03 1295.75 L1917.03 1446.71 L1956.1 1446.71 L1956.1 1295.75 L1917.03 1295.75 L1917.03 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1917.03,1295.75 1917.03,1446.71 1956.1,1446.71 1956.1,1295.75 1917.03,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1956.1 1295.75 L1956.1 1446.71 L1995.17 1446.71 L1995.17 1295.75 L1956.1 1295.75 L1956.1 1295.75 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1956.1,1295.75 1956.1,1446.71 1995.17,1446.71 1995.17,1295.75 1956.1,1295.75 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1995.17 993.811 L1995.17 1446.71 L2034.24 1446.71 L2034.24 993.811 L1995.17 993.811 L1995.17 993.811 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1995.17,993.811 1995.17,1446.71 2034.24,1446.71 2034.24,993.811 1995.17,993.811 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M2034.24 993.811 L2034.24 1446.71 L2073.32 1446.71 L2073.32 993.811 L2034.24 993.811 L2034.24 993.811 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2034.24,993.811 2034.24,1446.71 2073.32,1446.71 2073.32,993.811 2034.24,993.811 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M2073.32 993.811 L2073.32 1446.71 L2112.39 1446.71 L2112.39 993.811 L2073.32 993.811 L2073.32 993.811 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2073.32,993.811 2073.32,1446.71 2112.39,1446.71 2112.39,993.811 2073.32,993.811 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M2112.39 1144.78 L2112.39 1446.71 L2151.46 1446.71 L2151.46 1144.78 L2112.39 1144.78 L2112.39 1144.78 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2112.39,1144.78 2112.39,1446.71 2151.46,1446.71 2151.46,1144.78 2112.39,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M2151.46 993.811 L2151.46 1446.71 L2190.53 1446.71 L2190.53 993.811 L2151.46 993.811 L2151.46 993.811 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2151.46,993.811 2151.46,1446.71 2190.53,1446.71 2190.53,993.811 2151.46,993.811 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M2190.53 88.0053 L2190.53 1446.71 L2229.61 1446.71 L2229.61 88.0053 L2190.53 88.0053 L2190.53 88.0053 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2190.53,88.0053 2190.53,1446.71 2229.61,1446.71 2229.61,88.0053 2190.53,88.0053 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M236.904 1144.78 L236.904 1446.71 L275.976 1446.71 L275.976 1144.78 L236.904 1144.78 L236.904 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 236.904,1144.78 236.904,1446.71 275.976,1446.71 275.976,1144.78 236.904,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M275.976 1144.78 L275.976 1446.71 L315.049 1446.71 L315.049 1144.78 L275.976 1144.78 L275.976 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 275.976,1144.78 275.976,1446.71 315.049,1446.71 315.049,1144.78 275.976,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M315.049 1144.78 L315.049 1446.71 L354.121 1446.71 L354.121 1144.78 L315.049 1144.78 L315.049 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 315.049,1144.78 315.049,1446.71 354.121,1446.71 354.121,1144.78 315.049,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M354.121 1144.78 L354.121 1446.71 L393.194 1446.71 L393.194 1144.78 L354.121 1144.78 L354.121 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 354.121,1144.78 354.121,1446.71 393.194,1446.71 393.194,1144.78 354.121,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M393.194 1144.78 L393.194 1446.71 L432.267 1446.71 L432.267 1144.78 L393.194 1144.78 L393.194 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 393.194,1144.78 393.194,1446.71 432.267,1446.71 432.267,1144.78 393.194,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M432.267 1144.78 L432.267 1446.71 L471.339 1446.71 L471.339 1144.78 L432.267 1144.78 L432.267 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 432.267,1144.78 432.267,1446.71 471.339,1446.71 471.339,1144.78 432.267,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M471.339 1144.78 L471.339 1446.71 L510.412 1446.71 L510.412 1144.78 L471.339 1144.78 L471.339 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 471.339,1144.78 471.339,1446.71 510.412,1446.71 510.412,1144.78 471.339,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M510.412 1144.78 L510.412 1446.71 L549.484 1446.71 L549.484 1144.78 L510.412 1144.78 L510.412 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 510.412,1144.78 510.412,1446.71 549.484,1446.71 549.484,1144.78 510.412,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M549.484 1144.78 L549.484 1446.71 L588.557 1446.71 L588.557 1144.78 L549.484 1144.78 L549.484 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 549.484,1144.78 549.484,1446.71 588.557,1446.71 588.557,1144.78 549.484,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M588.557 1144.78 L588.557 1446.71 L627.63 1446.71 L627.63 1144.78 L588.557 1144.78 L588.557 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 588.557,1144.78 588.557,1446.71 627.63,1446.71 627.63,1144.78 588.557,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M627.63 1144.78 L627.63 1446.71 L666.702 1446.71 L666.702 1144.78 L627.63 1144.78 L627.63 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 627.63,1144.78 627.63,1446.71 666.702,1446.71 666.702,1144.78 627.63,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M666.702 1144.78 L666.702 1446.71 L705.775 1446.71 L705.775 1144.78 L666.702 1144.78 L666.702 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 666.702,1144.78 666.702,1446.71 705.775,1446.71 705.775,1144.78 666.702,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M705.775 1144.78 L705.775 1446.71 L744.848 1446.71 L744.848 1144.78 L705.775 1144.78 L705.775 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 705.775,1144.78 705.775,1446.71 744.848,1446.71 744.848,1144.78 705.775,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M744.848 1144.78 L744.848 1446.71 L783.92 1446.71 L783.92 1144.78 L744.848 1144.78 L744.848 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 744.848,1144.78 744.848,1446.71 783.92,1446.71 783.92,1144.78 744.848,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M783.92 1144.78 L783.92 1446.71 L822.993 1446.71 L822.993 1144.78 L783.92 1144.78 L783.92 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 783.92,1144.78 783.92,1446.71 822.993,1446.71 822.993,1144.78 783.92,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M822.993 1144.78 L822.993 1446.71 L862.065 1446.71 L862.065 1144.78 L822.993 1144.78 L822.993 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 822.993,1144.78 822.993,1446.71 862.065,1446.71 862.065,1144.78 822.993,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M862.065 1144.78 L862.065 1446.71 L901.138 1446.71 L901.138 1144.78 L862.065 1144.78 L862.065 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 862.065,1144.78 862.065,1446.71 901.138,1446.71 901.138,1144.78 862.065,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M901.138 1144.78 L901.138 1446.71 L940.211 1446.71 L940.211 1144.78 L901.138 1144.78 L901.138 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 901.138,1144.78 901.138,1446.71 940.211,1446.71 940.211,1144.78 901.138,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M940.211 1144.78 L940.211 1446.71 L979.283 1446.71 L979.283 1144.78 L940.211 1144.78 L940.211 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 940.211,1144.78 940.211,1446.71 979.283,1446.71 979.283,1144.78 940.211,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M979.283 1144.78 L979.283 1446.71 L1018.36 1446.71 L1018.36 1144.78 L979.283 1144.78 L979.283 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 979.283,1144.78 979.283,1446.71 1018.36,1446.71 1018.36,1144.78 979.283,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1018.36 1144.78 L1018.36 1446.71 L1057.43 1446.71 L1057.43 1144.78 L1018.36 1144.78 L1018.36 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1018.36,1144.78 1018.36,1446.71 1057.43,1446.71 1057.43,1144.78 1018.36,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1057.43 1144.78 L1057.43 1446.71 L1096.5 1446.71 L1096.5 1144.78 L1057.43 1144.78 L1057.43 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1057.43,1144.78 1057.43,1446.71 1096.5,1446.71 1096.5,1144.78 1057.43,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1096.5 1144.78 L1096.5 1446.71 L1135.57 1446.71 L1135.57 1144.78 L1096.5 1144.78 L1096.5 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1096.5,1144.78 1096.5,1446.71 1135.57,1446.71 1135.57,1144.78 1096.5,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1135.57 1144.78 L1135.57 1446.71 L1174.65 1446.71 L1174.65 1144.78 L1135.57 1144.78 L1135.57 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1135.57,1144.78 1135.57,1446.71 1174.65,1446.71 1174.65,1144.78 1135.57,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1174.65 1144.78 L1174.65 1446.71 L1213.72 1446.71 L1213.72 1144.78 L1174.65 1144.78 L1174.65 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1174.65,1144.78 1174.65,1446.71 1213.72,1446.71 1213.72,1144.78 1174.65,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1213.72 1144.78 L1213.72 1446.71 L1252.79 1446.71 L1252.79 1144.78 L1213.72 1144.78 L1213.72 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1213.72,1144.78 1213.72,1446.71 1252.79,1446.71 1252.79,1144.78 1213.72,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1252.79 1144.78 L1252.79 1446.71 L1291.86 1446.71 L1291.86 1144.78 L1252.79 1144.78 L1252.79 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1252.79,1144.78 1252.79,1446.71 1291.86,1446.71 1291.86,1144.78 1252.79,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1291.86 1144.78 L1291.86 1446.71 L1330.94 1446.71 L1330.94 1144.78 L1291.86 1144.78 L1291.86 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1291.86,1144.78 1291.86,1446.71 1330.94,1446.71 1330.94,1144.78 1291.86,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1330.94 1144.78 L1330.94 1446.71 L1370.01 1446.71 L1370.01 1144.78 L1330.94 1144.78 L1330.94 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1330.94,1144.78 1330.94,1446.71 1370.01,1446.71 1370.01,1144.78 1330.94,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1370.01 1144.78 L1370.01 1446.71 L1409.08 1446.71 L1409.08 1144.78 L1370.01 1144.78 L1370.01 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1370.01,1144.78 1370.01,1446.71 1409.08,1446.71 1409.08,1144.78 1370.01,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1409.08 1144.78 L1409.08 1446.71 L1448.15 1446.71 L1448.15 1144.78 L1409.08 1144.78 L1409.08 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1409.08,1144.78 1409.08,1446.71 1448.15,1446.71 1448.15,1144.78 1409.08,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1448.15 1144.78 L1448.15 1446.71 L1487.23 1446.71 L1487.23 1144.78 L1448.15 1144.78 L1448.15 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1448.15,1144.78 1448.15,1446.71 1487.23,1446.71 1487.23,1144.78 1448.15,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1487.23 1144.78 L1487.23 1446.71 L1526.3 1446.71 L1526.3 1144.78 L1487.23 1144.78 L1487.23 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1487.23,1144.78 1487.23,1446.71 1526.3,1446.71 1526.3,1144.78 1487.23,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1526.3 1144.78 L1526.3 1446.71 L1565.37 1446.71 L1565.37 1144.78 L1526.3 1144.78 L1526.3 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1526.3,1144.78 1526.3,1446.71 1565.37,1446.71 1565.37,1144.78 1526.3,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1565.37 1144.78 L1565.37 1446.71 L1604.45 1446.71 L1604.45 1144.78 L1565.37 1144.78 L1565.37 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1565.37,1144.78 1565.37,1446.71 1604.45,1446.71 1604.45,1144.78 1565.37,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1604.45 1144.78 L1604.45 1446.71 L1643.52 1446.71 L1643.52 1144.78 L1604.45 1144.78 L1604.45 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1604.45,1144.78 1604.45,1446.71 1643.52,1446.71 1643.52,1144.78 1604.45,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1643.52 1144.78 L1643.52 1446.71 L1682.59 1446.71 L1682.59 1144.78 L1643.52 1144.78 L1643.52 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1643.52,1144.78 1643.52,1446.71 1682.59,1446.71 1682.59,1144.78 1643.52,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1682.59 1144.78 L1682.59 1446.71 L1721.66 1446.71 L1721.66 1144.78 L1682.59 1144.78 L1682.59 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1682.59,1144.78 1682.59,1446.71 1721.66,1446.71 1721.66,1144.78 1682.59,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1721.66 1144.78 L1721.66 1446.71 L1760.74 1446.71 L1760.74 1144.78 L1721.66 1144.78 L1721.66 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1721.66,1144.78 1721.66,1446.71 1760.74,1446.71 1760.74,1144.78 1721.66,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1760.74 1144.78 L1760.74 1446.71 L1799.81 1446.71 L1799.81 1144.78 L1760.74 1144.78 L1760.74 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1760.74,1144.78 1760.74,1446.71 1799.81,1446.71 1799.81,1144.78 1760.74,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1799.81 1144.78 L1799.81 1446.71 L1838.88 1446.71 L1838.88 1144.78 L1799.81 1144.78 L1799.81 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1799.81,1144.78 1799.81,1446.71 1838.88,1446.71 1838.88,1144.78 1799.81,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1838.88 1144.78 L1838.88 1446.71 L1877.95 1446.71 L1877.95 1144.78 L1838.88 1144.78 L1838.88 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1838.88,1144.78 1838.88,1446.71 1877.95,1446.71 1877.95,1144.78 1838.88,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1877.95 1144.78 L1877.95 1446.71 L1917.03 1446.71 L1917.03 1144.78 L1877.95 1144.78 L1877.95 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1877.95,1144.78 1877.95,1446.71 1917.03,1446.71 1917.03,1144.78 1877.95,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1917.03 1144.78 L1917.03 1446.71 L1956.1 1446.71 L1956.1 1144.78 L1917.03 1144.78 L1917.03 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1917.03,1144.78 1917.03,1446.71 1956.1,1446.71 1956.1,1144.78 1917.03,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1956.1 1144.78 L1956.1 1446.71 L1995.17 1446.71 L1995.17 1144.78 L1956.1 1144.78 L1956.1 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1956.1,1144.78 1956.1,1446.71 1995.17,1446.71 1995.17,1144.78 1956.1,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M1995.17 1144.78 L1995.17 1446.71 L2034.24 1446.71 L2034.24 1144.78 L1995.17 1144.78 L1995.17 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 1995.17,1144.78 1995.17,1446.71 2034.24,1446.71 2034.24,1144.78 1995.17,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M2034.24 1144.78 L2034.24 1446.71 L2073.32 1446.71 L2073.32 1144.78 L2034.24 1144.78 L2034.24 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 2034.24,1144.78 2034.24,1446.71 2073.32,1446.71 2073.32,1144.78 2034.24,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M2073.32 1144.78 L2073.32 1446.71 L2112.39 1446.71 L2112.39 1144.78 L2073.32 1144.78 L2073.32 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 2073.32,1144.78 2073.32,1446.71 2112.39,1446.71 2112.39,1144.78 2073.32,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M2112.39 1144.78 L2112.39 1446.71 L2151.46 1446.71 L2151.46 1144.78 L2112.39 1144.78 L2112.39 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 2112.39,1144.78 2112.39,1446.71 2151.46,1446.71 2151.46,1144.78 2112.39,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M2151.46 1144.78 L2151.46 1446.71 L2190.53 1446.71 L2190.53 1144.78 L2151.46 1144.78 L2151.46 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 2151.46,1144.78 2151.46,1446.71 2190.53,1446.71 2190.53,1144.78 2151.46,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0902)\" d=\"\n",
"M2190.53 1144.78 L2190.53 1446.71 L2229.61 1446.71 L2229.61 1144.78 L2190.53 1144.78 L2190.53 1144.78 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0902)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:0.5; fill:none\" points=\"\n",
" 2190.53,1144.78 2190.53,1446.71 2229.61,1446.71 2229.61,1144.78 2190.53,1144.78 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0900)\" d=\"\n",
"M1989.93 312.204 L2280.76 312.204 L2280.76 130.764 L1989.93 130.764 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1989.93,312.204 2280.76,312.204 2280.76,130.764 1989.93,130.764 1989.93,312.204 \n",
" \"/>\n",
"<path clip-path=\"url(#clip0900)\" d=\"\n",
"M2013.93 215.436 L2157.93 215.436 L2157.93 167.052 L2013.93 167.052 L2013.93 215.436 Z\n",
" \" fill=\"#009af9\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2013.93,215.436 2157.93,215.436 2157.93,167.052 2013.93,167.052 2013.93,215.436 \n",
" \"/>\n",
"<g clip-path=\"url(#clip0900)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;\" transform=\"rotate(0, 2181.93, 208.744)\" x=\"2181.93\" y=\"208.744\">y1</text>\n",
"</g>\n",
"<path clip-path=\"url(#clip0900)\" d=\"\n",
"M2013.93 275.916 L2157.93 275.916 L2157.93 227.532 L2013.93 227.532 L2013.93 275.916 Z\n",
" \" fill=\"#808080\" fill-rule=\"evenodd\" fill-opacity=\"0.5\"/>\n",
"<polyline clip-path=\"url(#clip0900)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2013.93,275.916 2157.93,275.916 2157.93,227.532 2013.93,227.532 2013.93,275.916 \n",
" \"/>\n",
"<g clip-path=\"url(#clip0900)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;\" transform=\"rotate(0, 2181.93, 269.224)\" x=\"2181.93\" y=\"269.224\">y2</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"Exp = collect(Iterators.flatten([i*ones(Int(round(N_/(L+1)))) for i in 0:L]))\n",
"histogram(ranks, bins=L+1)\n",
"histogram!(Exp, bins=L+1, color=\"grey\", alpha=0.5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# SRS"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((9.007806798592817, 0.9823079315739186), 8.92825758016632, 3.09775760694777)"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"trace = my_inference_program(model, Y, 200)\n",
"(mean(trace[:μ]), mean(trace[:σ])), mean(Y), std(Y)"
]
},
{
"cell_type": "code",
"execution_count": 300,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"≺ (generic function with 1 method)"
]
},
"execution_count": 300,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Total Ordering\n",
"≺(a, b) = a<b"
]
},
{
"cell_type": "code",
"execution_count": 338,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"SRS (generic function with 2 methods)"
]
},
"execution_count": 338,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"function SRS(ground_truth_samples, model, theta, ≺, conditioned_generator)\n",
" r = []\n",
" for sample in ground_truth_samples\n",
" X = conditioned_generator(theta, model)[1]\n",
" append!(r, sum(X.≺sample))\n",
" end\n",
" r\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 339,
"metadata": {},
"outputs": [],
"source": [
"N = 100\n",
"σ = 3\n",
"μ = 9\n",
"Y = μ .+ σ*randn(N);"
]
},
{
"cell_type": "code",
"execution_count": 340,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sampling...\n",
"Done Sampling\n"
]
}
],
"source": [
"mh_chis = []\n",
"println(\"Sampling...\")\n",
"trace = infer_gen_mh(model, Y, 2000)\n",
"println(\"Done Sampling\")\n",
"mh_mcmc_steps_list = 10:10:2000\n",
"for mcmc_steps = mh_mcmc_steps_list\n",
" rank = SRS(Y, model, Dict(:μ=>mean(trace[:μ][1:mcmc_steps]), :σ=>mean(trace[:σ][1:mcmc_steps])), ≺, conditioned_generator_gen);\n",
" chi = Chi_Squared_Test(rank, N)\n",
" append!(mh_chis, chi)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 342,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sampling...\n",
"Done Sampling\n"
]
}
],
"source": [
"smc_chis = []\n",
"println(\"Sampling...\")\n",
"trace = infer_gen_smc(model, Y, 2000)\n",
"println(\"Done Sampling\")\n",
"smc_mcmc_steps_list = 10:10:2000\n",
"for mcmc_steps = smc_mcmc_steps_list\n",
" rank = SRS(Y, model, Dict(:μ=>mean(trace[:μ][1:mcmc_steps]), :σ=>mean(trace[:σ][1:mcmc_steps])), ≺, conditioned_generator_gen);\n",
" chi = Chi_Squared_Test(rank, N)\n",
" append!(smc_chis, chi)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 344,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Sampling...\n",
"Done Sampling\n"
]
}
],
"source": [
"hmc_chis = []\n",
"println(\"Sampling...\")\n",
"trace = infer_turing_hmc(turing_model, Y, 2000)\n",
"println(\"Done Sampling\")\n",
"hmc_mcmc_steps_list = 10:10:2000\n",
"for mcmc_steps = hmc_mcmc_steps_list\n",
" rank = SRS(Y, model, Dict(:μ=>mean(trace[:μ][1:mcmc_steps]), :σ=>mean(trace[:σ][1:mcmc_steps])), ≺, conditioned_generator_turing);\n",
" chi = Chi_Squared_Test(rank, N)\n",
" append!(hmc_chis, chi)\n",
"end"
]
},
{
"cell_type": "code",
"execution_count": 349,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n",
"<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"600\" height=\"400\" viewBox=\"0 0 2400 1600\">\n",
"<defs>\n",
" <clipPath id=\"clip3000\">\n",
" <rect x=\"0\" y=\"0\" width=\"2400\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<path clip-path=\"url(#clip3000)\" d=\"\n",
"M0 1600 L2400 1600 L2400 0 L0 0 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip3001\">\n",
" <rect x=\"480\" y=\"0\" width=\"1681\" height=\"1600\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<path clip-path=\"url(#clip3000)\" d=\"\n",
"M229.135 1425.62 L2352.76 1425.62 L2352.76 47.2441 L229.135 47.2441 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<defs>\n",
" <clipPath id=\"clip3002\">\n",
" <rect x=\"229\" y=\"47\" width=\"2125\" height=\"1379\"/>\n",
" </clipPath>\n",
"</defs>\n",
"<polyline clip-path=\"url(#clip3002)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 279.17,1425.62 279.17,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3002)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 782.541,1425.62 782.541,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3002)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1285.91,1425.62 1285.91,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3002)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 1789.28,1425.62 1789.28,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3002)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 2292.65,1425.62 2292.65,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3002)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 229.135,1292.86 2352.76,1292.86 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3002)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 229.135,990.454 2352.76,990.454 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3002)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 229.135,688.046 2352.76,688.046 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3002)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 229.135,385.638 2352.76,385.638 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3002)\" style=\"stroke:#000000; stroke-width:2; stroke-opacity:0.1; fill:none\" points=\"\n",
" 229.135,83.2306 2352.76,83.2306 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 229.135,1425.62 2352.76,1425.62 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 229.135,1425.62 229.135,47.2441 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 279.17,1425.62 279.17,1404.94 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 782.541,1425.62 782.541,1404.94 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1285.91,1425.62 1285.91,1404.94 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1789.28,1425.62 1789.28,1404.94 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 2292.65,1425.62 2292.65,1404.94 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 229.135,1292.86 260.99,1292.86 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 229.135,990.454 260.99,990.454 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 229.135,688.046 260.99,688.046 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 229.135,385.638 260.99,385.638 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 229.135,83.2306 260.99,83.2306 \n",
" \"/>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 279.17, 1479.62)\" x=\"279.17\" y=\"1479.62\">0</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 782.541, 1479.62)\" x=\"782.541\" y=\"1479.62\">500</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1285.91, 1479.62)\" x=\"1285.91\" y=\"1479.62\">1000</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 1789.28, 1479.62)\" x=\"1789.28\" y=\"1479.62\">1500</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:middle;\" transform=\"rotate(0, 2292.65, 1479.62)\" x=\"2292.65\" y=\"1479.62\">2000</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 205.135, 1310.36)\" x=\"205.135\" y=\"1310.36\">100</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 205.135, 1007.95)\" x=\"205.135\" y=\"1007.95\">200</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 205.135, 705.546)\" x=\"205.135\" y=\"705.546\">300</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 205.135, 403.138)\" x=\"205.135\" y=\"403.138\">400</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:end;\" transform=\"rotate(0, 205.135, 100.731)\" x=\"205.135\" y=\"100.731\">500</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:66px; text-anchor:middle;\" transform=\"rotate(0, 1290.95, 1559.48)\" x=\"1290.95\" y=\"1559.48\">Number of Samples</text>\n",
"</g>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:66px; text-anchor:middle;\" transform=\"rotate(-90, 89.2861, 736.431)\" x=\"89.2861\" y=\"736.431\">Non-Uniformity of SRS</text>\n",
"</g>\n",
"<polyline clip-path=\"url(#clip3002)\" style=\"stroke:#009af9; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 289.238,1292.86 299.305,606.396 309.373,86.2547 319.44,1047.91 329.507,1026.74 339.575,1174.92 349.642,1014.65 359.71,1132.59 369.777,1108.39 379.844,1111.42 \n",
" 389.912,1150.73 399.979,1199.12 410.047,1268.67 420.114,1235.4 430.182,1247.5 440.249,1171.9 450.316,1187.02 460.384,1193.07 470.451,1162.83 480.519,1190.04 \n",
" 490.586,1162.83 500.653,1253.55 510.721,1205.16 520.788,1187.02 530.856,1223.31 540.923,1129.56 550.991,1283.79 561.058,1277.74 571.125,1326.13 581.193,1298.91 \n",
" 591.26,1304.96 601.328,1220.28 611.395,1301.93 621.462,1256.57 631.53,1283.79 641.597,1187.02 651.665,1311.01 661.732,1280.77 671.8,1259.6 681.867,1235.4 \n",
" 691.934,1268.67 702.002,1259.6 712.069,1298.91 722.137,1356.37 732.204,1238.43 742.271,1256.57 752.339,1274.72 762.406,1304.96 772.474,1241.45 782.541,1232.38 \n",
" 792.609,1304.96 802.676,1274.72 812.743,1295.89 822.811,1238.43 832.878,1265.64 842.946,1211.21 853.013,1292.86 863.08,1314.03 873.148,1292.86 883.215,1277.74 \n",
" 893.283,1298.91 903.35,1268.67 913.417,1265.64 923.485,1320.08 933.552,1386.61 943.62,1301.93 953.687,1295.89 963.755,1280.77 973.822,1274.72 983.889,1292.86 \n",
" 993.957,1301.93 1004.02,1301.93 1014.09,1259.6 1024.16,1298.91 1034.23,1265.64 1044.29,1271.69 1054.36,1274.72 1064.43,1371.49 1074.5,1265.64 1084.56,1162.83 \n",
" 1094.63,1295.89 1104.7,1280.77 1114.77,1356.37 1124.83,1117.47 1134.9,1153.75 1144.97,1304.96 1155.04,1307.98 1165.1,1262.62 1175.17,1314.03 1185.24,1338.22 \n",
" 1195.31,1280.77 1205.37,1208.19 1215.44,1307.98 1225.51,1162.83 1235.57,1229.36 1245.64,1268.67 1255.71,1326.13 1265.78,1320.08 1275.84,1253.55 1285.91,1292.86 \n",
" 1295.98,1223.31 1306.05,1214.24 1316.11,1286.81 1326.18,1286.81 1336.25,1244.48 1346.32,1338.22 1356.38,1295.89 1366.45,1307.98 1376.52,1314.03 1386.59,1259.6 \n",
" 1396.65,1256.57 1406.72,1238.43 1416.79,1301.93 1426.86,1301.93 1436.92,1332.17 1446.99,1332.17 1457.06,1250.52 1467.13,1244.48 1477.19,1311.01 1487.26,1265.64 \n",
" 1497.33,1265.64 1507.4,1232.38 1517.46,1211.21 1527.53,1292.86 1537.6,1271.69 1547.66,1314.03 1557.73,1359.39 1567.8,1301.93 1577.87,1301.93 1587.93,1283.79 \n",
" 1598,1341.25 1608.07,1307.98 1618.14,1214.24 1628.2,1311.01 1638.27,1268.67 1648.34,1353.34 1658.41,1368.46 1668.47,1292.86 1678.54,1323.1 1688.61,1262.62 \n",
" 1698.68,1238.43 1708.74,1295.89 1718.81,1262.62 1728.88,1220.28 1738.95,1256.57 1749.01,1311.01 1759.08,1320.08 1769.15,1295.89 1779.22,1265.64 1789.28,1362.42 \n",
" 1799.35,1274.72 1809.42,1280.77 1819.48,1311.01 1829.55,1311.01 1839.62,1298.91 1849.69,1262.62 1859.75,1253.55 1869.82,1271.69 1879.89,1247.5 1889.96,1247.5 \n",
" 1900.02,1320.08 1910.09,1292.86 1920.16,1295.89 1930.23,1341.25 1940.29,1292.86 1950.36,1326.13 1960.43,1317.05 1970.5,1268.67 1980.56,1320.08 1990.63,1329.15 \n",
" 2000.7,1314.03 2010.77,1265.64 2020.83,1262.62 2030.9,1220.28 2040.97,1286.81 2051.04,1298.91 2061.1,1329.15 2071.17,1317.05 2081.24,1259.6 2091.31,1271.69 \n",
" 2101.37,1229.36 2111.44,1323.1 2121.51,1265.64 2131.57,1280.77 2141.64,1226.33 2151.71,1268.67 2161.78,1271.69 2171.84,1244.48 2181.91,1190.04 2191.98,1320.08 \n",
" 2202.05,1320.08 2212.11,1223.31 2222.18,1329.15 2232.25,1262.62 2242.32,1332.17 2252.38,1271.69 2262.45,1307.98 2272.52,1223.31 2282.59,1326.13 2292.65,1335.2 \n",
" \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3002)\" style=\"stroke:#e26f46; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 289.238,1280.77 299.305,1289.84 309.373,1317.05 319.44,1298.91 329.507,1265.64 339.575,1320.08 349.642,1211.21 359.71,1193.07 369.777,1190.04 379.844,1289.84 \n",
" 389.912,1317.05 399.979,1253.55 410.047,1307.98 420.114,1332.17 430.182,1241.45 440.249,1307.98 450.316,1298.91 460.384,1244.48 470.451,1344.27 480.519,1262.62 \n",
" 490.586,1205.16 500.653,1332.17 510.721,1301.93 520.788,1271.69 530.856,1262.62 540.923,1314.03 550.991,1295.89 561.058,1280.77 571.125,1298.91 581.193,1286.81 \n",
" 591.26,1211.21 601.328,1253.55 611.395,1283.79 621.462,1304.96 631.53,1238.43 641.597,1317.05 651.665,1280.77 661.732,1202.14 671.8,1344.27 681.867,1274.72 \n",
" 691.934,1171.9 702.002,1292.86 712.069,1301.93 722.137,1271.69 732.204,1314.03 742.271,1256.57 752.339,1365.44 762.406,1259.6 772.474,1292.86 782.541,1193.07 \n",
" 792.609,1217.26 802.676,1253.55 812.743,1220.28 822.811,1268.67 832.878,1226.33 842.946,1274.72 853.013,1350.32 863.08,1311.01 873.148,1280.77 883.215,1268.67 \n",
" 893.283,1265.64 903.35,1295.89 913.417,1341.25 923.485,1292.86 933.552,1356.37 943.62,1314.03 953.687,1280.77 963.755,1274.72 973.822,1274.72 983.889,1262.62 \n",
" 993.957,1295.89 1004.02,1244.48 1014.09,1326.13 1024.16,1295.89 1034.23,1317.05 1044.29,1295.89 1054.36,1298.91 1064.43,1274.72 1074.5,1253.55 1084.56,1341.25 \n",
" 1094.63,1320.08 1104.7,1274.72 1114.77,1335.2 1124.83,1177.95 1134.9,1262.62 1144.97,1217.26 1155.04,1177.95 1165.1,1323.1 1175.17,1304.96 1185.24,1247.5 \n",
" 1195.31,1292.86 1205.37,1341.25 1215.44,1326.13 1225.51,1241.45 1235.57,1262.62 1245.64,1320.08 1255.71,1280.77 1265.78,1335.2 1275.84,1338.22 1285.91,1283.79 \n",
" 1295.98,1326.13 1306.05,1292.86 1316.11,1250.52 1326.18,1259.6 1336.25,1244.48 1346.32,1304.96 1356.38,1298.91 1366.45,1250.52 1376.52,1271.69 1386.59,1371.49 \n",
" 1396.65,1229.36 1406.72,1274.72 1416.79,1314.03 1426.86,1338.22 1436.92,1320.08 1446.99,1332.17 1457.06,1220.28 1467.13,1253.55 1477.19,1298.91 1487.26,1283.79 \n",
" 1497.33,1320.08 1507.4,1329.15 1517.46,1193.07 1527.53,1311.01 1537.6,1289.84 1547.66,1274.72 1557.73,1262.62 1567.8,1268.67 1577.87,1232.38 1587.93,1286.81 \n",
" 1598,1317.05 1608.07,1183.99 1618.14,1283.79 1628.2,1286.81 1638.27,1323.1 1648.34,1353.34 1658.41,1196.09 1668.47,1286.81 1678.54,1326.13 1688.61,1247.5 \n",
" 1698.68,1326.13 1708.74,1298.91 1718.81,1187.02 1728.88,1226.33 1738.95,1226.33 1749.01,1277.74 1759.08,1298.91 1769.15,1265.64 1779.22,1271.69 1789.28,1298.91 \n",
" 1799.35,1229.36 1809.42,1332.17 1819.48,1298.91 1829.55,1244.48 1839.62,1283.79 1849.69,1277.74 1859.75,1256.57 1869.82,1226.33 1879.89,1304.96 1889.96,1259.6 \n",
" 1900.02,1292.86 1910.09,1262.62 1920.16,1211.21 1930.23,1329.15 1940.29,1283.79 1950.36,1298.91 1960.43,1289.84 1970.5,1286.81 1980.56,1268.67 1990.63,1347.3 \n",
" 2000.7,1277.74 2010.77,1317.05 2020.83,1259.6 2030.9,1301.93 2040.97,1317.05 2051.04,1262.62 2061.1,1247.5 2071.17,1292.86 2081.24,1341.25 2091.31,1271.69 \n",
" 2101.37,1326.13 2111.44,1298.91 2121.51,1304.96 2131.57,1338.22 2141.64,1289.84 2151.71,1250.52 2161.78,1329.15 2171.84,1307.98 2181.91,1289.84 2191.98,1223.31 \n",
" 2202.05,1277.74 2212.11,1214.24 2222.18,1247.5 2232.25,1341.25 2242.32,1317.05 2252.38,1232.38 2262.45,1295.89 2272.52,1335.2 2282.59,1271.69 2292.65,1277.74 \n",
" \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3002)\" style=\"stroke:#3da44d; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 289.238,1314.03 299.305,1286.81 309.373,1289.84 319.44,1304.96 329.507,1280.77 339.575,1250.52 349.642,1262.62 359.71,1247.5 369.777,1317.05 379.844,1262.62 \n",
" 389.912,1298.91 399.979,1286.81 410.047,1241.45 420.114,1268.67 430.182,1238.43 440.249,1208.19 450.316,1314.03 460.384,1165.85 470.451,1283.79 480.519,1235.4 \n",
" 490.586,1335.2 500.653,1238.43 510.721,1253.55 520.788,1235.4 530.856,1280.77 540.923,1295.89 550.991,1235.4 561.058,1202.14 571.125,1341.25 581.193,1283.79 \n",
" 591.26,1317.05 601.328,1311.01 611.395,1314.03 621.462,1289.84 631.53,1320.08 641.597,1283.79 651.665,1307.98 661.732,1301.93 671.8,1271.69 681.867,1265.64 \n",
" 691.934,1217.26 702.002,1329.15 712.069,1256.57 722.137,1338.22 732.204,1280.77 742.271,1265.64 752.339,1307.98 762.406,1326.13 772.474,1377.54 782.541,1268.67 \n",
" 792.609,1262.62 802.676,1253.55 812.743,1250.52 822.811,1265.64 832.878,1208.19 842.946,1286.81 853.013,1280.77 863.08,1277.74 873.148,1220.28 883.215,1329.15 \n",
" 893.283,1247.5 903.35,1298.91 913.417,1292.86 923.485,1283.79 933.552,1280.77 943.62,1292.86 953.687,1295.89 963.755,1274.72 973.822,1183.99 983.889,1274.72 \n",
" 993.957,1259.6 1004.02,1241.45 1014.09,1286.81 1024.16,1283.79 1034.23,1314.03 1044.29,1356.37 1054.36,1253.55 1064.43,1295.89 1074.5,1268.67 1084.56,1247.5 \n",
" 1094.63,1253.55 1104.7,1295.89 1114.77,1256.57 1124.83,1359.39 1134.9,1256.57 1144.97,1232.38 1155.04,1286.81 1165.1,1332.17 1175.17,1317.05 1185.24,1220.28 \n",
" 1195.31,1307.98 1205.37,1359.39 1215.44,1344.27 1225.51,1301.93 1235.57,1301.93 1245.64,1301.93 1255.71,1304.96 1265.78,1247.5 1275.84,1277.74 1285.91,1208.19 \n",
" 1295.98,1292.86 1306.05,1223.31 1316.11,1286.81 1326.18,1223.31 1336.25,1311.01 1346.32,1271.69 1356.38,1304.96 1366.45,1268.67 1376.52,1283.79 1386.59,1250.52 \n",
" 1396.65,1286.81 1406.72,1214.24 1416.79,1304.96 1426.86,1271.69 1436.92,1307.98 1446.99,1338.22 1457.06,1232.38 1467.13,1244.48 1477.19,1262.62 1487.26,1274.72 \n",
" 1497.33,1307.98 1507.4,1259.6 1517.46,1304.96 1527.53,1283.79 1537.6,1298.91 1547.66,1247.5 1557.73,1241.45 1567.8,1235.4 1577.87,1214.24 1587.93,1347.3 \n",
" 1598,1320.08 1608.07,1268.67 1618.14,1223.31 1628.2,1307.98 1638.27,1289.84 1648.34,1280.77 1658.41,1317.05 1668.47,1241.45 1678.54,1344.27 1688.61,1247.5 \n",
" 1698.68,1311.01 1708.74,1238.43 1718.81,1280.77 1728.88,1289.84 1738.95,1298.91 1749.01,1338.22 1759.08,1250.52 1769.15,1277.74 1779.22,1268.67 1789.28,1226.33 \n",
" 1799.35,1265.64 1809.42,1311.01 1819.48,1274.72 1829.55,1280.77 1839.62,1311.01 1849.69,1277.74 1859.75,1217.26 1869.82,1298.91 1879.89,1311.01 1889.96,1262.62 \n",
" 1900.02,1347.3 1910.09,1247.5 1920.16,1301.93 1930.23,1223.31 1940.29,1317.05 1950.36,1329.15 1960.43,1277.74 1970.5,1298.91 1980.56,1220.28 1990.63,1323.1 \n",
" 2000.7,1174.92 2010.77,1280.77 2020.83,1277.74 2030.9,1174.92 2040.97,1232.38 2051.04,1250.52 2061.1,1314.03 2071.17,1353.34 2081.24,1289.84 2091.31,1268.67 \n",
" 2101.37,1332.17 2111.44,1256.57 2121.51,1323.1 2131.57,1292.86 2141.64,1256.57 2151.71,1338.22 2161.78,1274.72 2171.84,1295.89 2181.91,1286.81 2191.98,1283.79 \n",
" 2202.05,1317.05 2212.11,1326.13 2222.18,1301.93 2232.25,1271.69 2242.32,1156.78 2252.38,1292.86 2262.45,1347.3 2272.52,1314.03 2282.59,1259.6 2292.65,1238.43 \n",
" \n",
" \"/>\n",
"<path clip-path=\"url(#clip3000)\" d=\"\n",
"M1671.71 372.684 L2280.76 372.684 L2280.76 130.764 L1671.71 130.764 Z\n",
" \" fill=\"#ffffff\" fill-rule=\"evenodd\" fill-opacity=\"1\"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#000000; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1671.71,372.684 2280.76,372.684 2280.76,130.764 1671.71,130.764 1671.71,372.684 \n",
" \"/>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#009af9; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1695.71,191.244 1839.71,191.244 \n",
" \"/>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;\" transform=\"rotate(0, 1863.71, 208.744)\" x=\"1863.71\" y=\"208.744\">MH from Gen</text>\n",
"</g>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#e26f46; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1695.71,251.724 1839.71,251.724 \n",
" \"/>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;\" transform=\"rotate(0, 1863.71, 269.224)\" x=\"1863.71\" y=\"269.224\">SMC from Gen</text>\n",
"</g>\n",
"<polyline clip-path=\"url(#clip3000)\" style=\"stroke:#3da44d; stroke-width:4; stroke-opacity:1; fill:none\" points=\"\n",
" 1695.71,312.204 1839.71,312.204 \n",
" \"/>\n",
"<g clip-path=\"url(#clip3000)\">\n",
"<text style=\"fill:#000000; fill-opacity:1; font-family:Arial,Helvetica Neue,Helvetica,sans-serif; font-size:48px; text-anchor:start;\" transform=\"rotate(0, 1863.71, 329.704)\" x=\"1863.71\" y=\"329.704\">HMC from Turing</text>\n",
"</g>\n",
"</svg>\n"
]
},
"execution_count": 349,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plot(mh_mcmc_steps_list, mh_chis, xaxis=\"Number of Samples\", yaxis=\"Non-Uniformity of SRS\", label=\"MH from Gen\")\n",
"plot!(smc_mcmc_steps_list, smc_chis, xaxis=\"Number of Samples\", yaxis=\"Non-Uniformity of SRS\", label=\"SMC from Gen\")\n",
"plot!(hmc_mcmc_steps_list, hmc_chis, xaxis=\"Number of Samples\", yaxis=\"Non-Uniformity of SRS\", label=\"HMC from Turing\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"@webio": {
"lastCommId": null,
"lastKernelId": null
},
"kernelspec": {
"display_name": "Julia 1.1.0",
"language": "julia",
"name": "julia-1.1"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.1.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment