diff --git a/benchmarks/Linear Multivariate Gaussian State Space Model Benchmark.ipynb b/benchmarks/Linear Multivariate Gaussian State Space Model Benchmark.ipynb
index ea41440ad..b8071ef9b 100644
--- a/benchmarks/Linear Multivariate Gaussian State Space Model Benchmark.ipynb
+++ b/benchmarks/Linear Multivariate Gaussian State Space Model Benchmark.ipynb
@@ -220,7 +220,7 @@
"function reactivemp_inference_smoothing(observations, A, B, P, Q)\n",
" n = length(observations) \n",
" \n",
- " result = inference(\n",
+ " result = infer(\n",
" model = linear_gaussian_ssm_smoothing(n, A, B, P, Q),\n",
" data = (y = observations, ),\n",
" options = (limit_stack_depth = 500, )\n",
@@ -237,7 +237,7 @@
" x_min_t_mean, x_min_t_cov = mean_cov(q(x_t))\n",
" end\n",
" \n",
- " result = rxinference(\n",
+ " result = infer(\n",
" model = linear_gaussian_ssm_filtering(A, B, P, Q),\n",
" data = (y_t = observations, ),\n",
" autoupdates = autoupdates,\n",
diff --git a/benchmarks/Tiny Benchmark.ipynb b/benchmarks/Tiny Benchmark.ipynb
index 7d4a5fa7a..c656d301a 100644
--- a/benchmarks/Tiny Benchmark.ipynb
+++ b/benchmarks/Tiny Benchmark.ipynb
@@ -121,7 +121,7 @@
" x_prior_mean, x_prior_var = mean_var(q(x_next))\n",
" end\n",
"\n",
- " return rxinference(\n",
+ " return infer(\n",
" model = filtering(c = 1.0, v = v),\n",
" datastream = datastream,\n",
" autoupdates = autoupdates,\n",
@@ -460,7 +460,7 @@
],
"source": [
"function run_smoothing(data, n, v)\n",
- " return inference(\n",
+ " return infer(\n",
" model = smoothing(n, c = 1.0, v = v), \n",
" data = (y = data, ), \n",
" returnvars = KeepLast(),\n",
diff --git a/docs/make.jl b/docs/make.jl
index 529326f7a..da03de180 100644
--- a/docs/make.jl
+++ b/docs/make.jl
@@ -115,7 +115,7 @@ makedocs(;
"Model specification" => "manuals/model-specification.md",
"Constraints specification" => "manuals/constraints-specification.md",
"Meta specification" => "manuals/meta-specification.md",
- "Inference specification" => ["Overview" => "manuals/inference/overview.md", "Static dataset" => "manuals/inference/inference.md", "Real-time dataset / reactive inference" => "manuals/inference/rxinference.md", "Inference results postprocessing" => "manuals/inference/postprocess.md", "Manual inference specification" => "manuals/inference/manual.md"],
+ "Inference specification" => ["Overview" => "manuals/inference/overview.md", "Static vs Streamline inference" => "manuals/inference/infer.md", "Inference results postprocessing" => "manuals/inference/postprocess.md", "Manual inference specification" => "manuals/inference/manual.md"],
"Inference customization" => ["Defining a custom node and rules" => "manuals/custom-node.md"],
"Debugging" => "manuals/debugging.md",
"Delta node" => "manuals/delta-node.md"
diff --git a/docs/src/library/bethe-free-energy.md b/docs/src/library/bethe-free-energy.md
index dd9b2ba3d..9fec6ee7c 100644
--- a/docs/src/library/bethe-free-energy.md
+++ b/docs/src/library/bethe-free-energy.md
@@ -53,7 +53,7 @@ which internalizes the factors of the model. The last two terms specify entropi
Crucially, the BFE can be iteratively optimized for each individual variational distribution in turn. Optimization of the BFE is thus more manageable than direct optimization of the VFE.
-For iterative optimization of the BFE, the variational distributions must first be initialized. The `initmarginals` keyword argument to the [`inference`](@ref) and [`rxinference`](@ref) functions initializes the variational distributions of the BFE.
+For iterative optimization of the BFE, the variational distributions must first be initialized. The `initmarginals` keyword argument to the [`infer`](@ref) function initializes the variational distributions of the BFE.
For disambiguation, note that the initialization of the variational distribution is a different design consideration than the choice of priors. A prior specifies a factor in the model definition, while initialization concerns factors in the variational distribution.
diff --git a/docs/src/manuals/constraints-specification.md b/docs/src/manuals/constraints-specification.md
index 86e557e06..12ec40c43 100644
--- a/docs/src/manuals/constraints-specification.md
+++ b/docs/src/manuals/constraints-specification.md
@@ -162,4 +162,4 @@ end
model, returnval = create_model(my_model(arguments...); constraints = constraints)
```
-Alternatively, it is possible to use constraints directly in the automatic [`inference`](@ref) and [`rxinference`](@ref) functions that accepts `constraints` keyword argument.
\ No newline at end of file
+Alternatively, it is possible to use constraints directly in the automatic [`infer`](@ref) function that accepts `constraints` keyword argument.
\ No newline at end of file
diff --git a/docs/src/manuals/custom-node.md b/docs/src/manuals/custom-node.md
index db34b8e04..be8f3e5c0 100644
--- a/docs/src/manuals/custom-node.md
+++ b/docs/src/manuals/custom-node.md
@@ -279,7 +279,7 @@ end
Finally, we can run inference with this model and the generated dataset:
```@example create-node
-result_mybernoulli = inference(
+result_mybernoulli = infer(
model = coin_model_mybernoulli(length(dataset)),
data = (y = dataset, ),
)
@@ -312,7 +312,7 @@ As a sanity check, we can create the same model with the `RxInfer` built-in node
end
-result_bernoulli = inference(
+result_bernoulli = infer(
model = coin_model(length(dataset)),
data = (y = dataset, ),
)
diff --git a/docs/src/manuals/debugging.md b/docs/src/manuals/debugging.md
index 322ec5498..ac1a3c1e6 100644
--- a/docs/src/manuals/debugging.md
+++ b/docs/src/manuals/debugging.md
@@ -36,7 +36,7 @@ dataset = convert.(Int64, rand(Bernoulli(θ_real), n))
end
-result = inference(
+result = infer(
model = coin_model(length(dataset)),
data = (x = dataset, ),
);
@@ -56,7 +56,7 @@ vline!([θ_real], label="Real θ", title = "Inference results")
We can figure out what's wrong by looking at the Memory Addon. To obtain the trace, we have to add `addons = (AddonMemory(),)` as an argument to the inference function.
```@example addoncoin
-result = inference(
+result = infer(
model = coin_model(length(dataset)),
data = (x = dataset, ),
addons = (AddonMemory(),)
@@ -93,7 +93,7 @@ All the observations (purple, green, pink, blue) have much smaller rate paramete
end
-result = inference(
+result = infer(
model = coin_model(length(dataset)),
data = (x = dataset, ),
);
diff --git a/docs/src/manuals/delta-node.md b/docs/src/manuals/delta-node.md
index 313d127af..d9f5530ea 100644
--- a/docs/src/manuals/delta-node.md
+++ b/docs/src/manuals/delta-node.md
@@ -63,7 +63,7 @@ end
To execute the inference procedure:
```@example delta_node_example
-inference(model = delta_node_example(), meta=delta_meta, data = (z = 1.0,))
+infer(model = delta_node_example(), meta=delta_meta, data = (z = 1.0,))
```
This methodology is consistent even when the delta node is associated with multiple nodes. For instance:
diff --git a/docs/src/manuals/getting-started.md b/docs/src/manuals/getting-started.md
index 59fad5b62..c17140172 100644
--- a/docs/src/manuals/getting-started.md
+++ b/docs/src/manuals/getting-started.md
@@ -121,7 +121,7 @@ As you can see, `RxInfer` offers a model specification syntax that resembles clo
Once we have defined our model, the next step is to use `RxInfer` API to infer quantities of interests. To do this we can use a generic `inference` function that supports static datasets.
```@example coin
-result = inference(
+result = infer(
model = coin_model(length(dataset)),
data = (y = dataset, )
)
diff --git a/docs/src/manuals/inference/infer.md b/docs/src/manuals/inference/infer.md
new file mode 100644
index 000000000..4b1e7facc
--- /dev/null
+++ b/docs/src/manuals/inference/infer.md
@@ -0,0 +1,17 @@
+# [Automatic Inference Specification](@id user-guide-inference)
+
+`RxInfer` provides the `infer` function for quickly running and testing your model with both static and streaming datasets. To enable streaming behavior, the `infer` function accepts an `autoupdates` argument, which specifies how to update your priors for future states based on newly updated posteriors.
+
+It's important to note that while this function covers most capabilities of the inference engine, advanced use cases may require resorting to the [Manual Inference Specification](@ref user-guide-inference-execution-manual-specification).
+
+For details on manual inference specification, see the [Manual Inference](@ref user-guide-manual-inference) section.
+
+```@docs
+infer
+InferenceResult
+RxInfer.start
+RxInfer.stop
+@autoupdates
+RxInferenceEngine
+RxInferenceEvent
+```
\ No newline at end of file
diff --git a/docs/src/manuals/inference/inference.md b/docs/src/manuals/inference/inference.md
deleted file mode 100644
index 9132db198..000000000
--- a/docs/src/manuals/inference/inference.md
+++ /dev/null
@@ -1,11 +0,0 @@
-# [Automatic inference specification on static datasets](@id user-guide-inference)
-
-`RxInfer` exports the `inference` function to quickly run and test you model with static datasets. Note, however, that this function does cover almost all capabilities of the inference engine, but for advanced use cases you may want to resort to the [manual inference specification](@ref user-guide-inference-execution-manual-specification).
-
-For running inference on real-time datasets see the [Reactive Inference](@ref user-guide-rxinference) section.
-For manual inference specification see the [Manual Inference](@ref user-guide-manual-inference) section.
-
-```@docs
-inference
-InferenceResult
-```
diff --git a/docs/src/manuals/inference/overview.md b/docs/src/manuals/inference/overview.md
index 51445b92d..44672b013 100644
--- a/docs/src/manuals/inference/overview.md
+++ b/docs/src/manuals/inference/overview.md
@@ -11,12 +11,12 @@ The inference engine itself isn't aware of different algorithm types and simply
## [Automatic inference specification on static datasets](@id user-guide-inference-execution-automatic-specification-static)
-`RxInfer` exports the `inference` function to quickly run and test you model with static datasets. See more information about the `inference` function on the separate [documentation section](@ref user-guide-inference).
+`RxInfer` exports the `infer` function to quickly run and test you model with static datasets. See more information about the `infer` function on the separate [documentation section](@ref user-guide-inference).
## [Automatic inference specification on real-time datasets](@id user-guide-inference-execution-automatic-specification-realtime)
-`RxInfer` exports the `rxinference` function to quickly run and test you model with dynamic and potentially real-time datasets. See more information about the `rxinference` function on the separate [documentation section](@ref user-guide-rxinference).
+`RxInfer` supports running inference the with dynamic and potentially real-time datasets with enabled `autoupdates` keyword. See more information about the `infer` function on the separate [documentation section](@ref user-guide-inference).
## [Manual inference specification](@id user-guide-inference-execution-manual-specification)
-While both `inference` and `rxinference` use most of the `RxInfer` inference engine capabilities in some situations it might be beneficial to write inference code manually. The [Manual inference](@ref user-guide-manual-inference) documentation section explains how to write your custom inference routines.
\ No newline at end of file
+While `infer` uses most of the `RxInfer` inference engine capabilities in some situations it might be beneficial to write inference code manually. The [Manual inference](@ref user-guide-manual-inference) documentation section explains how to write your custom inference routines.
\ No newline at end of file
diff --git a/docs/src/manuals/inference/postprocess.md b/docs/src/manuals/inference/postprocess.md
index 3ca6910c5..681c5ae92 100644
--- a/docs/src/manuals/inference/postprocess.md
+++ b/docs/src/manuals/inference/postprocess.md
@@ -1,7 +1,6 @@
# [Inference results postprocessing](@id user-guide-inference-postprocess)
-Both [`inference`](@ref) and [`rxinference`](@ref) allow users to postprocess
-the inference result with the `postprocess = ...` keyword argument. The inference engine
+[`infer`](@ref) allow users to postprocess the inference result with the `postprocess = ...` keyword argument. The inference engine
operates on __wrapper__ types to distinguish between marginals and messages. By default
these wrapper types are removed from the inference results if no addons option is present.
Together with the enabled addons, however, the wrapper types are preserved in the
diff --git a/docs/src/manuals/inference/rxinference.md b/docs/src/manuals/inference/rxinference.md
deleted file mode 100644
index 256a5e4f1..000000000
--- a/docs/src/manuals/inference/rxinference.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# [Automatic inference specification on real-time datasets](@id user-guide-rxinference)
-
-`RxInfer` exports the `rxinference` function to quickly run and test you model with dynamic and potentially real-time datasets. Note, however, that this function does cover almost all capabilities of the __reactive__ inference engine, but for advanced use cases you may want to resort to the [manual inference specification](@ref user-guide-inference-execution-manual-specification).
-
-For running inference on static datasets see the [Static Inference](@ref user-guide-inference) section.
-For manual inference specification see the [Manual Inference](@ref user-guide-manual-inference) section.
-
-```@docs
-rxinference
-RxInfer.start
-RxInfer.stop
-@autoupdates
-RxInferenceEngine
-RxInferenceEvent
-```
\ No newline at end of file
diff --git a/docs/src/manuals/meta-specification.md b/docs/src/manuals/meta-specification.md
index c0f1d0f1b..e50d68cdc 100644
--- a/docs/src/manuals/meta-specification.md
+++ b/docs/src/manuals/meta-specification.md
@@ -90,16 +90,10 @@ end
model, returnval = create_model(my_model(arguments...); meta = my_meta)
```
-Alternatively, it is possible to use meta directly in the automatic [`inference`](@ref) and [`rxinference`](@ref) functions that accepts `meta` keyword argument:
+Alternatively, it is possible to use meta directly in the automatic [`infer`](@ref) function that accepts `meta` keyword argument:
```julia
-inferred_result = inference(
- model = my_model(arguments...),
- meta = my_meta,
- ...
-)
-
-inferred_result = rxinference(
+inferred_result = infer(
model = my_model(arguments...),
meta = my_meta,
...
@@ -116,7 +110,7 @@ inferred_result = rxinference(
...
end
```
-If you add node-specific meta to your model this way, then you do not need to use the `meta` keyword argument in the `inference` and `rxinference` functions.
+If you add node-specific meta to your model this way, then you do not need to use the `meta` keyword argument in the `infer` function.
## Create your own meta
@@ -179,7 +173,7 @@ y_data = 4.0
end
#do inference
-inference_result = inference(
+inference_result = infer(
model = gaussian_model(),
data = (y = y_data,)
)
diff --git a/examples/advanced_examples/Active Inference Mountain car.ipynb b/examples/advanced_examples/Active Inference Mountain car.ipynb
index cf50442b5..61fceb4b2 100644
--- a/examples/advanced_examples/Active Inference Mountain car.ipynb
+++ b/examples/advanced_examples/Active Inference Mountain car.ipynb
@@ -11,17 +11,61 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 2,
"id": "fcbc7485",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `~/.julia/dev/RxInfer/examples`\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[32m\u001b[1mPrecompiling\u001b[22m\u001b[39m "
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "project...\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[32m ✓ \u001b[39m\u001b[90mShiftedArrays\u001b[39m\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[32m ✓ \u001b[39m\u001b[90mStatsModels\u001b[39m\n"
+ ]
+ },
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "\u001b[32m ✓ \u001b[39mGLM\n",
+ " 3 dependencies successfully precompiled in 6 seconds. 374 already precompiled.\n"
+ ]
+ }
+ ],
"source": [
"import Pkg; Pkg.activate(\"..\"); Pkg.instantiate();"
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 4,
"id": "5e3fda93",
"metadata": {},
"outputs": [],
@@ -69,10 +113,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 5,
"id": "49986f41",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "create_world (generic function with 1 method)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"import HypergeometricFunctions: _₂F₁\n",
"\n",
@@ -142,10 +196,122 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 6,
"id": "78a3026d",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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",
+ "image/svg+xml": [
+ "\n",
+ "\n"
+ ],
+ "text/html": [
+ "\n",
+ "\n"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"engine_force_limit = 0.04\n",
"friction_coefficient = 0.1\n",
@@ -179,7 +345,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 7,
"id": "02e7940f",
"metadata": {},
"outputs": [],
@@ -343,7 +509,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 8,
"id": "037c0d5b",
"metadata": {},
"outputs": [],
@@ -418,18 +584,28 @@
"3. **Slide**:\n",
" After updating its internal belief, the agent moves to the next time step and uses the inferred action $u_t$ in the previous time step to interact with the environment. \n",
"\n",
- "In the cell below, we create the agent through the `create_agent` function, which includes `infer`, `act`, `slide` and `future` functions:\n",
+ "In the cell below, we create the agent through the `create_agent` function, which includes `compute`, `act`, `slide` and `future` functions:\n",
"- The `act` function selects the next action based on the inferred policy. On the other hand, the `future` function predicts the next $T$ positions based on the current action. These two function implement the **Act-Execute-Observe** phase.\n",
- "- The `infer` function infers the policy (which is a set of actions for the next $T$ time steps) and the agent's state using the agent internal model. This function implements the **Infer** phase.\n",
+ "- The `compute` function infers the policy (which is a set of actions for the next $T$ time steps) and the agent's state using the agent internal model. This function implements the **Infer** phase. We call it `compute` to avoid the clash with the `infer` function of `RxInfer.jl`.\n",
"- The `slide` function implements the **Slide** phase, which moves the agent internal model to the next time step."
]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 15,
"id": "42b9d130",
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "create_agent (generic function with 1 method)"
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"# We are going to use some private functionality from ReactiveMP, \n",
"# in the future we should expose a proper API for this\n",
@@ -454,7 +630,7 @@
"\n",
" # The `infer` function is the heart of the agent\n",
" # It calls the `RxInfer.inference` function to perform Bayesian inference by message passing\n",
- " infer = (upsilon_t::Float64, y_hat_t::Vector{Float64}) -> begin\n",
+ " compute = (upsilon_t::Float64, y_hat_t::Vector{Float64}) -> begin\n",
" m_u[1] = [ upsilon_t ] # Register action with the generative model\n",
" V_u[1] = fill(tiny, 1, 1) # Clamp control prior to performed action\n",
"\n",
@@ -469,7 +645,7 @@
" :V_s_t_min => V_s_t_min)\n",
" \n",
" model = mountain_car(; T = T, Fg = Fg, Fa = Fa, Ff = Ff, engine_force_limit = engine_force_limit) \n",
- " result = inference(model = model, data = data)\n",
+ " result = infer(model = model, data = data)\n",
" end\n",
" \n",
" # The `act` function returns the inferred best possible action\n",
@@ -509,7 +685,7 @@
" V_x[end] = Sigma\n",
" end\n",
"\n",
- " return (infer, act, slide, future) \n",
+ " return (compute, act, slide, future) \n",
"end"
]
},
@@ -524,7 +700,7 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 16,
"id": "df06c331",
"metadata": {},
"outputs": [],
@@ -537,7 +713,7 @@
"\n",
"T_ai = 50\n",
"\n",
- "(infer_ai, act_ai, slide_ai, future_ai) = create_agent(; # Let there be an agent\n",
+ "(compute_ai, act_ai, slide_ai, future_ai) = create_agent(; # Let there be an agent\n",
" T = T_ai, \n",
" Fa = Fa,\n",
" Fg = Fg, \n",
@@ -556,12 +732,12 @@
"agent_x = Vector{Vector{Float64}}(undef, N_ai) # Observations\n",
"\n",
"for t=1:N_ai\n",
- " agent_a[t] = act_ai() # Invoke an action from the agent\n",
- " agent_f[t] = future_ai() # Fetch the predicted future states\n",
- " execute_ai(agent_a[t]) # The action influences hidden external states\n",
- " agent_x[t] = observe_ai() # Observe the current environmental outcome (update p)\n",
- " infer_ai(agent_a[t], agent_x[t]) # Infer beliefs from current model state (update q)\n",
- " slide_ai() # Prepare for next iteration\n",
+ " agent_a[t] = act_ai() # Invoke an action from the agent\n",
+ " agent_f[t] = future_ai() # Fetch the predicted future states\n",
+ " execute_ai(agent_a[t]) # The action influences hidden external states\n",
+ " agent_x[t] = observe_ai() # Observe the current environmental outcome (update p)\n",
+ " compute_ai(agent_a[t], agent_x[t]) # Infer beliefs from current model state (update q)\n",
+ " slide_ai() # Prepare for next iteration\n",
"end\n",
"\n",
"animation_ai = @animate for i in 1:N_ai\n",
@@ -618,7 +794,7 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Julia 1.9.1",
+ "display_name": "Julia 1.9.3",
"language": "julia",
"name": "julia-1.9"
},
@@ -626,7 +802,7 @@
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
- "version": "1.9.1"
+ "version": "1.9.3"
}
},
"nbformat": 4,
diff --git a/examples/advanced_examples/Advanced Tutorial.ipynb b/examples/advanced_examples/Advanced Tutorial.ipynb
index f5d7b417d..ed184d215 100644
--- a/examples/advanced_examples/Advanced Tutorial.ipynb
+++ b/examples/advanced_examples/Advanced Tutorial.ipynb
@@ -645,7 +645,7 @@
"\n",
"dataset = float.(rand(Bernoulli(p), 500));\n",
"\n",
- "result = inference(\n",
+ "result = infer(\n",
" model = coin_toss_model(length(dataset)),\n",
" data = (y = dataset, )\n",
")\n",
@@ -978,7 +978,7 @@
"metadata": {},
"outputs": [],
"source": [
- "rxresult = rxinference(\n",
+ "rxresult = infer(\n",
" model = online_coin_toss_model(),\n",
" data = (y = dataset, ),\n",
" autoupdates = autoupdates,\n",
@@ -1297,7 +1297,7 @@
}
],
"source": [
- "result = inference(\n",
+ "result = infer(\n",
" model = test_model6(length(dataset)),\n",
" data = (y = dataset, ),\n",
" constraints = constraints6, \n",
diff --git a/examples/advanced_examples/Assessing People Skills.ipynb b/examples/advanced_examples/Assessing People Skills.ipynb
index 0c3ba7617..de6718f4c 100644
--- a/examples/advanced_examples/Assessing People Skills.ipynb
+++ b/examples/advanced_examples/Assessing People Skills.ipynb
@@ -179,7 +179,7 @@
],
"source": [
"test_results = [0.1, 0.1, 0.1]\n",
- "inference_result = inference(\n",
+ "inference_result = infer(\n",
" model = skill_model(),\n",
" data = (r = test_results, )\n",
")"
diff --git a/examples/advanced_examples/Chance Constraints.ipynb b/examples/advanced_examples/Chance Constraints.ipynb
index 6bc09156d..dbe441e46 100644
--- a/examples/advanced_examples/Chance Constraints.ipynb
+++ b/examples/advanced_examples/Chance Constraints.ipynb
@@ -254,11 +254,11 @@
" m_u = zeros(T)\n",
" v_u = lambda^(-1)*ones(T)\n",
" \n",
- " function infer(x_t::Float64)\n",
+ " function compute(x_t::Float64)\n",
" model_t = regulator_model(; T=T, lo=lo, hi=hi, epsilon=epsilon, atol=atol)\n",
" data_t = (m_u = m_u, v_u = v_u, x_t = x_t)\n",
" \n",
- " result = inference(\n",
+ " result = infer(\n",
" model = model_t, \n",
" data = data_t,\n",
" iterations = n_its)\n",
@@ -272,7 +272,7 @@
" pol = zeros(T) # Predefine policy variable\n",
" act() = pol[1]\n",
"\n",
- " return (infer, act)\n",
+ " return (compute, act)\n",
"end;"
]
},
@@ -309,7 +309,7 @@
"outputs": [],
"source": [
"(execute, observe) = initializeWorld() # Let there be a world\n",
- "(infer, act) = initializeAgent() # Let there be an agent\n",
+ "(compute, act) = initializeAgent() # Let there be an agent\n",
"\n",
"a = Vector{Float64}(undef, N) # Actions\n",
"x = Vector{Float64}(undef, N) # States\n",
@@ -317,7 +317,7 @@
" a[t] = act()\n",
" execute(t, a[t])\n",
" x[t] = observe()\n",
- " infer(x[t])\n",
+ " compute(x[t])\n",
"end"
]
},
diff --git a/examples/advanced_examples/Conjugate-Computational Variational Message Passing.ipynb b/examples/advanced_examples/Conjugate-Computational Variational Message Passing.ipynb
index 05fe54cf0..c241d9a91 100644
--- a/examples/advanced_examples/Conjugate-Computational Variational Message Passing.ipynb
+++ b/examples/advanced_examples/Conjugate-Computational Variational Message Passing.ipynb
@@ -544,7 +544,7 @@
}
],
"source": [
- "results = inference(\n",
+ "results = infer(\n",
" model = measurement_model(nr_observations),\n",
" data = (y = measurements,),\n",
" iterations = 5,\n",
@@ -1164,7 +1164,7 @@
}
],
"source": [
- "res = inference(\n",
+ "res = infer(\n",
" model = normal_square_model(1000),\n",
" data = (y = y,),\n",
" iterations = 10,\n",
diff --git a/examples/advanced_examples/GP Regression by SSM.ipynb b/examples/advanced_examples/GP Regression by SSM.ipynb
index 7894748ef..c623a1f12 100644
--- a/examples/advanced_examples/GP Regression by SSM.ipynb
+++ b/examples/advanced_examples/GP Regression by SSM.ipynb
@@ -418,7 +418,7 @@
}
],
"source": [
- "result_32 = inference(\n",
+ "result_32 = infer(\n",
" model = gp_regression(n, P∞, A, Q, H, σ²_noise),\n",
" data = (y = y_data,)\n",
")"
@@ -506,7 +506,7 @@
}
],
"source": [
- "result_52 = inference(\n",
+ "result_52 = infer(\n",
" model = gp_regression(n, P∞, A, Q, H, σ²_noise),\n",
" data = (y = y_data,)\n",
")"
diff --git a/examples/advanced_examples/Global Parameter Optimisation.ipynb b/examples/advanced_examples/Global Parameter Optimisation.ipynb
index b1dae3b5d..12b29878d 100644
--- a/examples/advanced_examples/Global Parameter Optimisation.ipynb
+++ b/examples/advanced_examples/Global Parameter Optimisation.ipynb
@@ -120,7 +120,7 @@
"# c[2] is μ0\n",
"function f(c)\n",
" x0_prior = NormalMeanVariance(c[2], 100.0)\n",
- " result = inference(\n",
+ " result = infer(\n",
" model = smoothing(n, x0_prior, c[1], P), \n",
" data = (y = data,), \n",
" free_energy = true\n",
@@ -494,7 +494,7 @@
"source": [
"function f(θ)\n",
" x0 = MvNormalMeanCovariance([ θ[2], θ[3] ], Matrix(Diagonal(0.01 * ones(2))))\n",
- " result = inference(\n",
+ " result = infer(\n",
" model = rotate_ssm(n, θ[1], x0, Q, P), \n",
" data = (y = y,), \n",
" free_energy = true\n",
@@ -716,7 +716,7 @@
"source": [
"x0 = MvNormalMeanCovariance([ res.minimizer[2], res.minimizer[3] ], Matrix(Diagonal(100.0 * ones(2))))\n",
"\n",
- "result = inference(\n",
+ "result = infer(\n",
" model = rotate_ssm(n, res.minimizer[1], x0, Q, P), \n",
" data = (y = y,), \n",
" free_energy = true\n",
@@ -2152,7 +2152,7 @@
"index = 1\n",
"data=testset[index]\n",
"n=length(data)\n",
- "result = inference(\n",
+ "result = infer(\n",
" model = ssm(n, get_matrix_AS(data,W1,b1,W2_1,W2_2,b2,s2_1,W3,b3),Q,B,R), \n",
" data = (y = data, ), \n",
" returnvars = (x = KeepLast(), ),\n",
@@ -2220,7 +2220,7 @@
"function fe_tot_est(W1,b1,W2_1,W2_2,b2,s2_1,W3,b3)\n",
" fe_ = 0\n",
" for train_instance in trainset\n",
- " result = inference(\n",
+ " result = infer(\n",
" model = ssm(n, get_matrix_AS(train_instance,W1,b1,W2_1,W2_2,b2,s2_1,W3,b3),Q,B,R), \n",
" data = (y = train_instance, ), \n",
" returnvars = (x = KeepLast(), ),\n",
@@ -3147,7 +3147,7 @@
"index = 1\n",
"data = testset[index]\n",
"n = length(data)\n",
- "result = inference(\n",
+ "result = infer(\n",
" model = ssm(n, get_matrix_AS(data,W1a,b1a,W2_1a,W2_2a,b2a,s2_1a,W3,b3a),Q,B,R), \n",
" data = (y = data, ), \n",
" returnvars = (x = KeepLast(), ),\n",
diff --git a/examples/advanced_examples/Infinite Data Stream.ipynb b/examples/advanced_examples/Infinite Data Stream.ipynb
index cc216160f..23ee5336c 100644
--- a/examples/advanced_examples/Infinite Data Stream.ipynb
+++ b/examples/advanced_examples/Infinite Data Stream.ipynb
@@ -229,7 +229,7 @@
" τ_rate = rate(q(τ))\n",
" end\n",
" \n",
- " engine = rxinference(\n",
+ " engine = infer(\n",
" model = kalman_filter(),\n",
" constraints = filter_constraints(),\n",
" datastream = datastream,\n",
@@ -332,7 +332,7 @@
" display(p)\n",
" end\n",
" \n",
- " engine = rxinference(\n",
+ " engine = infer(\n",
" model = kalman_filter(),\n",
" constraints = filter_constraints(),\n",
" datastream = datastream,\n",
diff --git a/examples/advanced_examples/Nonlinear Sensor Fusion.ipynb b/examples/advanced_examples/Nonlinear Sensor Fusion.ipynb
index 7aa314fb5..655daccac 100644
--- a/examples/advanced_examples/Nonlinear Sensor Fusion.ipynb
+++ b/examples/advanced_examples/Nonlinear Sensor Fusion.ipynb
@@ -222,7 +222,7 @@
},
"outputs": [],
"source": [
- "results_fast = inference(\n",
+ "results_fast = infer(\n",
" model = random_walk_model(nr_observations),\n",
" meta = random_walk_model_meta(1, 3, StableRNG(42)), # or random_walk_unscented_meta()\n",
" data = (y = [distances[t,:] for t in 1:nr_observations],),\n",
@@ -240,7 +240,7 @@
"metadata": {},
"outputs": [],
"source": [
- "results_accuracy = inference(\n",
+ "results_accuracy = infer(\n",
" model = random_walk_model(nr_observations),\n",
" meta = random_walk_model_meta(1000, 100, StableRNG(42)),\n",
" data = (y = [distances[t,:] for t in 1:nr_observations],),\n",
@@ -819,7 +819,7 @@
"metadata": {},
"outputs": [],
"source": [
- "results_wishart = inference(\n",
+ "results_wishart = infer(\n",
" model = random_walk_model_wishart(nr_observations),\n",
" data = (y = [distances[t,:] for t in 1:nr_observations],),\n",
" iterations = 100,\n",
diff --git a/examples/basic_examples/Bayesian Linear Regression Tutorial.ipynb b/examples/basic_examples/Bayesian Linear Regression Tutorial.ipynb
index b4f02a0fa..e743b5bff 100644
--- a/examples/basic_examples/Bayesian Linear Regression Tutorial.ipynb
+++ b/examples/basic_examples/Bayesian Linear Regression Tutorial.ipynb
@@ -792,7 +792,7 @@
}
],
"source": [
- "results = inference(\n",
+ "results = infer(\n",
" model = linear_regression(length(x_data)), \n",
" data = (y = y_data, x = x_data), \n",
" initmessages = (b = NormalMeanVariance(0.0, 100.0), ), \n",
@@ -2018,7 +2018,7 @@
}
],
"source": [
- "results_unknown_noise = inference(\n",
+ "results_unknown_noise = infer(\n",
" model = linear_regression_unknown_noise(length(x_data_un)), \n",
" data = (y = y_data_un, x = x_data_un), \n",
" initmessages = (b = NormalMeanVariance(0.0, 100.0), ), \n",
@@ -4423,7 +4423,7 @@
}
],
"source": [
- "results_mv = inference(\n",
+ "results_mv = infer(\n",
" model = linear_regression_multivariate(dim_mv, nr_samples_mv),\n",
" data = (y = y_data_mv_processed, x = x_data_mv_processed),\n",
" initmarginals = (W = InverseWishart(dim_mv + 2, 10 * diageye(dim_mv)), ),\n",
@@ -7711,7 +7711,7 @@
" weeks = values(dataset[!, \"Weeks\"])\n",
" FVC_obs = values(dataset[!, \"FVC\"]);\n",
"\n",
- " results = inference(\n",
+ " results = infer(\n",
" model = partially_pooled(patient_codes, weeks),\n",
" data = (data = FVC_obs, ),\n",
" options = (limit_stack_depth = 500, ),\n",
@@ -9485,7 +9485,7 @@
" weeks = values(dataset[!, \"Weeks\"])\n",
" FVC_obs = values(dataset[!, \"FVC\"]);\n",
" \n",
- " return inference(\n",
+ " return infer(\n",
" model = partially_pooled_with_smoking(patient_codes, smoking_status_patient_mapping, weeks),\n",
" data = (data = FVC_obs, ),\n",
" options = (limit_stack_depth = 500, ),\n",
diff --git a/examples/basic_examples/Coin Toss Model.ipynb b/examples/basic_examples/Coin Toss Model.ipynb
index 32fe46f1a..d976a9f20 100644
--- a/examples/basic_examples/Coin Toss Model.ipynb
+++ b/examples/basic_examples/Coin Toss Model.ipynb
@@ -123,7 +123,7 @@
}
],
"source": [
- "result = inference(\n",
+ "result = infer(\n",
" model = coin_model(length(dataset)), \n",
" data = (y = dataset, )\n",
")"
diff --git a/examples/basic_examples/Hidden Markov Model.ipynb b/examples/basic_examples/Hidden Markov Model.ipynb
index 5d2e9a170..7483cb9bc 100644
--- a/examples/basic_examples/Hidden Markov Model.ipynb
+++ b/examples/basic_examples/Hidden Markov Model.ipynb
@@ -409,7 +409,7 @@
" s = KeepLast()\n",
")\n",
"\n",
- "result = inference(\n",
+ "result = infer(\n",
" model = imodel, \n",
" data = idata,\n",
" constraints = hidden_markov_model_constraints(),\n",
diff --git a/examples/basic_examples/Kalman filtering and smoothing.ipynb b/examples/basic_examples/Kalman filtering and smoothing.ipynb
index 1743ce395..c4b81144b 100644
--- a/examples/basic_examples/Kalman filtering and smoothing.ipynb
+++ b/examples/basic_examples/Kalman filtering and smoothing.ipynb
@@ -1570,8 +1570,8 @@
"outputs": [],
"source": [
"# For large number of observations you need to use `limit_stack_depth = 100` option during model creation, e.g. \n",
- "# inference(..., options = (limit_stack_depth = 500, ))`\n",
- "result = inference(\n",
+ "# infer(..., options = (limit_stack_depth = 500, ))`\n",
+ "result = infer(\n",
" model = rotate_ssm(length(y), x0, A, B, Q, P), \n",
" data = (y = y,),\n",
" free_energy = true\n",
@@ -1785,7 +1785,7 @@
}
],
"source": [
- "@benchmark inference(\n",
+ "@benchmark infer(\n",
" model = rotate_ssm(length($y), $x0, $A, $B, $Q, $P), \n",
" data = (y = $y,)\n",
")"
@@ -2701,7 +2701,7 @@
"imessages = (x = xinit, w = winit)\n",
"imarginals = (τ_x = GammaShapeRate(a_x, b_x), τ_w = GammaShapeRate(a_w, b_w), τ_y = GammaShapeRate(a_y, b_y))\n",
"\n",
- "result = inference(\n",
+ "result = infer(\n",
" model = identification_problem(+, n, m_x_0, τ_x_0, a_x, b_x, m_w_0, τ_w_0, a_w, b_w, a_y, b_y),\n",
" data = (y = real_y,), \n",
" options = (limit_stack_depth = 500, ), \n",
@@ -4156,7 +4156,7 @@
"min_imessages = (x = NormalMeanPrecision(min_m_x_0, min_τ_x_0), w = NormalMeanPrecision(min_m_w_0, min_τ_w_0))\n",
"min_imarginals = (τ_x = GammaShapeRate(min_a_x, min_b_x), τ_w = GammaShapeRate(min_a_w, min_b_w), τ_y = GammaShapeRate(min_a_y, min_b_y))\n",
"\n",
- "min_result = inference(\n",
+ "min_result = infer(\n",
" model = identification_problem(smooth_min, n, min_m_x_0, min_τ_x_0, min_a_x, min_b_x, min_m_w_0, min_τ_w_0, min_a_w, min_b_w, min_a_y, min_b_y),\n",
" data = (y = min_real_y,), \n",
" meta = min_meta,\n",
@@ -4956,7 +4956,7 @@
"id": "f9c1ade7-fb6b-410a-a384-4cf3abdeb228",
"metadata": {},
"source": [
- "Next step is to generate our dataset and to run the actual inference procedure! For that we use the `rxinference` function, which has a similar API as the `inference` function:"
+ "Next step is to generate our dataset and to run the actual inference procedure! For that we use the `infer` function with `autoupdates` keyword:"
]
},
{
@@ -5757,7 +5757,7 @@
}
],
"source": [
- "engine = rxinference(\n",
+ "engine = infer(\n",
" model = rx_identification(smooth_min),\n",
" constraints = rx_constraints,\n",
" data = (y = rx_real_y,),\n",
@@ -6733,7 +6733,7 @@
"source": [
"x0_prior = NormalMeanVariance(0.0, 1000.0)\n",
"\n",
- "result = inference(\n",
+ "result = infer(\n",
" model = smoothing(n, x0_prior), \n",
" data = (y = missing_data,), \n",
" constraints = constraints,\n",
diff --git a/examples/basic_examples/Predicting Bike Rental Demand.ipynb b/examples/basic_examples/Predicting Bike Rental Demand.ipynb
index 13338e763..e84fb04bf 100644
--- a/examples/basic_examples/Predicting Bike Rental Demand.ipynb
+++ b/examples/basic_examples/Predicting Bike Rental Demand.ipynb
@@ -96,7 +96,7 @@
],
"source": [
"# Implicit Prediction\n",
- "result = inference(model = example_model(), data = (y = missing,))"
+ "result = infer(model = example_model(), data = (y = missing,))"
]
},
{
@@ -120,7 +120,7 @@
],
"source": [
"# Explicit Prediction\n",
- "result = inference(model = example_model(), predictvars = (y = KeepLast(),))"
+ "result = infer(model = example_model(), predictvars = (y = KeepLast(),))"
]
},
{
@@ -455,7 +455,7 @@
"\n",
"bicycle_model = bicycle_ssm(length(y), prior_h, prior_θ, prior_a, diageye(state_dim), diageye(state_dim))\n",
"\n",
- "result = inference(\n",
+ "result = infer(\n",
" model = bicycle_model,\n",
" data = (y = y, x=X), \n",
" options = (limit_stack_depth = 500, ), \n",
diff --git a/examples/hidden_examples/Tiny Benchmark.ipynb b/examples/hidden_examples/Tiny Benchmark.ipynb
index 908d8a794..c4c8d6ae4 100644
--- a/examples/hidden_examples/Tiny Benchmark.ipynb
+++ b/examples/hidden_examples/Tiny Benchmark.ipynb
@@ -117,7 +117,7 @@
" x_prior_mean, x_prior_var = mean_var(q(x_next))\n",
" end\n",
"\n",
- " return rxinference(\n",
+ " return infer(\n",
" model = filtering(c = 1.0, v = v),\n",
" datastream = datastream,\n",
" autoupdates = autoupdates,\n",
@@ -455,7 +455,7 @@
],
"source": [
"function run_smoothing(data, n, v)\n",
- " return inference(\n",
+ " return infer(\n",
" model = smoothing(n, c = 1.0, v = v), \n",
" data = (y = data, ), \n",
" returnvars = KeepLast(),\n",
diff --git a/examples/pics/ai-mountain-car-ai.gif b/examples/pics/ai-mountain-car-ai.gif
index 612af34f5..d0f4a32ac 100644
Binary files a/examples/pics/ai-mountain-car-ai.gif and b/examples/pics/ai-mountain-car-ai.gif differ
diff --git a/examples/problem_specific/Autoregressive Models.ipynb b/examples/problem_specific/Autoregressive Models.ipynb
index bd12b27ba..887286cde 100644
--- a/examples/problem_specific/Autoregressive Models.ipynb
+++ b/examples/problem_specific/Autoregressive Models.ipynb
@@ -1381,7 +1381,7 @@
"\n",
"# First execution is slow due to Julia's initial compilation \n",
"# Subsequent runs will be faster (benchmarks are below)\n",
- "mresult = inference(\n",
+ "mresult = infer(\n",
" model = mmodel, \n",
" data = mdata,\n",
" constraints = mconstraints,\n",
@@ -3274,7 +3274,7 @@
"uinitmarginals = (γ = GammaShapeRate(1.0, 1.0), θ = NormalMeanPrecision(0.0, 1.0))\n",
"ureturnvars = (x = KeepLast(), γ = KeepEach(), θ = KeepEach())\n",
"\n",
- "uresult = inference(\n",
+ "uresult = infer(\n",
" model = umodel, \n",
" data = udata,\n",
" meta = umeta,\n",
@@ -3784,7 +3784,7 @@
"metadata": {},
"outputs": [],
"source": [
- "result = inference(\n",
+ "result = infer(\n",
" model = ARMA(length(x_train), x_prev_train, h_prior, γ_prior, τ_prior, η_prior, θ_prior, p_order, q_order), \n",
" data = (x = x_train, ),\n",
" initmarginals = arma_imarginals,\n",
diff --git a/examples/problem_specific/Gamma Mixture.ipynb b/examples/problem_specific/Gamma Mixture.ipynb
index a863aad2c..c9766b1a9 100644
--- a/examples/problem_specific/Gamma Mixture.ipynb
+++ b/examples/problem_specific/Gamma Mixture.ipynb
@@ -218,7 +218,7 @@
" default_factorisation = MeanField() # Mixture models require Mean-Field assumption currently\n",
")\n",
"\n",
- "gresult = inference(\n",
+ "gresult = infer(\n",
" model = gmodel, \n",
" data = gdata,\n",
" constraints = constraints,\n",
diff --git a/examples/problem_specific/Gaussian Mixture.ipynb b/examples/problem_specific/Gaussian Mixture.ipynb
index 82a61c368..85ab78501 100644
--- a/examples/problem_specific/Gaussian Mixture.ipynb
+++ b/examples/problem_specific/Gaussian Mixture.ipynb
@@ -600,7 +600,7 @@
}
],
"source": [
- "results_univariate = inference(\n",
+ "results_univariate = infer(\n",
" model = univariate_gaussian_mixture_model(length(data_univariate)), \n",
" constraints = MeanField(),\n",
" data = (y = data_univariate,), \n",
@@ -2244,7 +2244,7 @@
"source": [
"rng = MersenneTwister(121)\n",
"m = [[cos(k*2π/6), sin(k*2π/6)] for k in 1:6]\n",
- "results_multivariate = inference(\n",
+ "results_multivariate = infer(\n",
" model = multivariate_gaussian_mixture_model(\n",
" 6, \n",
" length(data_multivariate), \n",
@@ -3631,7 +3631,7 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Julia 1.9.2",
+ "display_name": "Julia 1.9.3",
"language": "julia",
"name": "julia-1.9"
},
@@ -3639,7 +3639,7 @@
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
- "version": "1.9.2"
+ "version": "1.9.3"
},
"orig_nbformat": 4
},
diff --git a/examples/problem_specific/Hierarchical Gaussian Filter.ipynb b/examples/problem_specific/Hierarchical Gaussian Filter.ipynb
index 5293876fd..19e471662 100644
--- a/examples/problem_specific/Hierarchical Gaussian Filter.ipynb
+++ b/examples/problem_specific/Hierarchical Gaussian Filter.ipynb
@@ -10,17 +10,9 @@
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": null,
"metadata": {},
- "outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "\u001b[32m\u001b[1m Activating\u001b[22m\u001b[39m project at `~/.julia/dev/RxInfer/examples`\n"
- ]
- }
- ],
+ "outputs": [],
"source": [
"# Activate local environment, see `Project.toml`\n",
"import Pkg; Pkg.activate(\"..\"); Pkg.instantiate(); "
@@ -63,7 +55,7 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
@@ -80,7 +72,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 4,
"metadata": {},
"outputs": [
{
@@ -89,9 +81,8 @@
"generate_data (generic function with 1 method)"
]
},
- "execution_count": 3,
"metadata": {},
- "output_type": "execute_result"
+ "output_type": "display_data"
}
],
"source": [
@@ -120,7 +111,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
@@ -151,548 +142,765 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
+ "image/png": "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agzDsFisrKysloV+fn5tOo84OzsDKC4u7iBgAA4ODl9++eXWrVtv3rwZFxf3119/HTt27O+//46IiEhMTHR1de1497Kysk8++URxt7PlyDx18pbiAx4+fPjkyZMty+/cuQNA8QEFAsH8+fP379/v7e09Y8aMSZMmTZs2zdvbu9PGFSorK2fPnl1dXb1+/XrFM0JCegAlQmK86urqWCxWy/6QCk5OTi03FVO3tCl8sKSyshJAXFxcy+yoYGNjw+VyW5bweLw2dRR9WORyuTqRs9ns4cOHDx8+fPXq1ampqRMmTCguLt6+ffuGDRs62KusrCwsLCwrK2v48OFLly61tbVVRLVu3br2xmK2pPhVsWfPngffsrW1bXq9Z8+eIUOGfP/997/99ptivEp4ePi2bdtGjBjRcftyufyJJ55IT0+fO3fuv/71r07jIURbKBES48Xn8ysqKkpLS11cXFqWt7ksU4xgKy4ubtm/tL1q69evb3OvVdcGDBiwevXq999/v2m0Q3u2bduWlZX12muvffrpp02FRUVFbS5h22NlZVVfX3/37l3FxWt7zMzM3n333XfffffevXtnzpz59ddfz507N3Xq1OTk5I53XLduXUxMTGBg4O7du1vefSVE1+hsI8ZLkdjaXMDV19e3ed6mshqAhISElpuKR4Z///23LkLtmGLWlabkobjOe/AiLzExEUCbMXltPkUHu2v6AQMCAp577rmzZ8/Onz+/oqLi7NmzHVQ+cODApk2bbG1tjx492ul4SkK0ixIhMV7z5s3D/f6cTYXR0dE1NTUPVtu2bVtDQ0NT4YkTJ27dutWy2pw5cxwcHH7//XeVqaKurq77Af/8888PtiMUCvfu3QsgNDRUUeLu7g4gNze3TU3FTeCWk4nLZLKWk5R2vLtiTtcNGzYIhcI2b4lEIolEAqChoeHBPkqKJ5eNjY3tfa7ExMRly5axWKw9e/b4+fm1V40QHaFbo8R4LV26dOvWrX/99deSJUteeeUVPp9/9OjR9evXe3p6tkwDo0aNmj9//oEDB6ZPn/7ee++5u7tfvHjxzTff9PLyaplU+Hz+N998s3DhwqioqNdee238+PGurq55eXnJyck//vjjY489pnKou0Y+/PDD1atXP/zwwxMmTPD29haJRKmpqdHR0YrblYruqQAsLS0HDhx4586d5cuXh4SEmJub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",
"image/svg+xml": [
"\n",
"