Skip to content

Commit

Permalink
Merge branch 'main' into make-formatting-a-separate-action
Browse files Browse the repository at this point in the history
  • Loading branch information
bvdmitri authored Jan 6, 2025
2 parents f737ac1 + b89f097 commit 1f55b93
Show file tree
Hide file tree
Showing 28 changed files with 3,711 additions and 1,021 deletions.
2 changes: 2 additions & 0 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ jobs:
steps:
- uses: actions/checkout@v2
- uses: julia-actions/setup-julia@v2
with:
version: '1.10' # 1.11 is not supported by Cairo/GraphViz
- uses: actions/cache@v3
id: examples
with:
Expand Down
6 changes: 3 additions & 3 deletions Project.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
name = "RxInfer"
uuid = "86711068-29c9-4ff7-b620-ae75d7495b3d"
authors = ["Bagaev Dmitry <[email protected]> and contributors"]
version = "3.7.1"
version = "3.8.3"

[deps]
BayesBase = "b4ee3484-f114-42fe-b91c-797d54a0c67e"
Expand Down Expand Up @@ -36,13 +36,13 @@ DomainSets = "0.5.2, 0.6, 0.7"
ExponentialFamily = "1.5"
ExponentialFamilyProjection = "1.1"
FastCholesky = "1.3.0"
GraphPPL = "~4.3.0"
GraphPPL = "~4.5.0"
LinearAlgebra = "1.9"
MacroTools = "0.5.6"
Optim = "1.0.0"
ProgressMeter = "1.0.0"
Random = "1.9"
ReactiveMP = "~4.4.1"
ReactiveMP = "~4.4.4"
Reexport = "1.2.0"
Rocket = "1.8.0"
Static = "0.8.10, 1"
Expand Down
46 changes: 28 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -166,40 +166,49 @@ Our high-level project roadmap outlines the key milestones and focus areas for t

| Q1/Q2 2024 | Q3/Q4 2024 | 2025 |
|---------------------|---------------------------|--------------------|
| 🧩 **Nested models with [GraphPPL.jl](https://github.com/reactivebayes/GraphPPL.jl)**| 🌐 **Graph structure visualization** | 🔀 **Stochastic Processes** |
| 🔄 **Development of [ExponentialFamilyProjection.jl]()**| 🧠 **Automated inference with [ExponentialFamilyProjection.jl](https://github.com/reactivebayes/ExponentialFamilyProjection.jl)** | 🚀 **Robustness & Memory-efficiency** |
| 🧩 **Nested models with [GraphPPL.jl](https://github.com/reactivebayes/GraphPPL.jl)**| 🌐 **Graph structure visualization** | 🧠🧠 **Automated Inference** |
| 🔄 **Development of [ExponentialFamilyProjection.jl]()**| 🧠 **Semi-automated inference with [ExponentialFamilyProjection.jl](https://github.com/reactivebayes/ExponentialFamilyProjection.jl)** | 🚀 **Stochastic Processes** |

For a more granular view of our progress and ongoing tasks, check out our [project board](https://github.com/orgs/reactivebayes/projects/2/views/4) or join our 4-weekly [public meetings](https://dynalist.io/d/F4aA-Z2c8X-M1iWTn9hY_ndN).

# External Contributors

RxInfer has benefited from the contributions and development efforts of external collaborators and organizations. We're grateful for their involvement in advancing the project.
## Ecosystem

## Active Inference Institute
The `RxInfer` framework consists of three *core* packages developed by [ReactiveBayes](https://github.com/reactivebayes/):

Members of the [Active Inference Institute](https://www.activeinference.org/) have been working on improving the visualization capabilities of RxInfer/GraphPPL. Their efforts focus on developing better model visualization capabilities, creating various summary/subgraph visualization modalities, implementing different graph layout algorithms, and improving the ability to inspect and understand models.
- [`ReactiveMP.jl`](https://github.com/reactivebayes/ReactiveMP.jl) - the underlying message passing-based inference engine
- [`GraphPPL.jl`](https://github.com/reactivebayes/GraphPPL.jl) - model and constraints specification package
- [`Rocket.jl`](https://github.com/reactivebayes/Rocket.jl) - reactive extensions package for Julia

For more details on their ongoing work, see the [RxInfer development project board](https://coda.io/d/RxInfer-2024-Active-Inference-Institute_ddtS-XZ4BJb/Developing-RxInfer-jl_sufeCeIa#_lutfq_7F).
# Where to go next?

## Educational Content
There are a set of [examples](https://reactivebayes.github.io/RxInfer.jl/stable/examples/overview/) available in `RxInfer` repository that demonstrate the more advanced features of the package. Alternatively, you can head to the [documentation](https://reactivebayes.github.io/RxInfer.jl/stable/) that provides more detailed information of how to use `RxInfer` to specify more complex probabilistic models.

Educational content and tutorials related to RxInfer are being developed and can be found on [Learnable Loop](https://learnableloop.com/#category=RxInfer). These resources cover a range of topics including visualizing Forney Factor Graphs, sales forecasting with time-varying autoregressive models, hidden Markov models with control, and various applications of Active Inference across different domains.

# Contributing
# Join Our Community and Contribute to RxInfer

We welcome contributions from the community. If you are interested in contributing to the development of `RxInfer.jl`, please check out our [contributing guide](https://reactivebayes.github.io/RxInfer.jl/stable/contributing/guide), the [contributing guidelines](https://reactivebayes.github.io/RxInfer.jl/stable/contributing/guidelines), or look at the [issues linked with the `good first issue` label](https://github.com/ReactiveBayes/RxInfer.jl/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) to get started.
RxInfer is a community-driven project and we welcome all contributions! To get started:
- Check out our [contributing guide](https://reactivebayes.github.io/RxInfer.jl/stable/contributing/guide)
- Review the [contributing guidelines](https://reactivebayes.github.io/RxInfer.jl/stable/contributing/guidelines)
- Browse [beginner-friendly issues](https://github.com/ReactiveBayes/RxInfer.jl/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22) to find something that interests you

# Where to go next?
## Active Inference Institute Collaboration

There are a set of [examples](https://reactivebayes.github.io/RxInfer.jl/stable/examples/overview/) available in `RxInfer` repository that demonstrate the more advanced features of the package. Alternatively, you can head to the [documentation](https://reactivebayes.github.io/RxInfer.jl/stable/) that provides more detailed information of how to use `RxInfer` to specify more complex probabilistic models.
The [Active Inference Institute](https://www.activeinference.org/) community members are enhancing RxInfer/GraphPPL's visualization capabilities. Their work includes:
- Developing advanced model visualization features ✅ ([PR](https://github.com/ReactiveBayes/GraphPPL.jl/pull/251))
- Creating summary and subgraph visualization modalities
- Implementing various graph layout algorithms
- Improving model inspection and understanding tools

## Ecosystem
For more details on ongoing work, see the [RxInfer development project board](https://coda.io/d/RxInfer-2024-Active-Inference-Institute_ddtS-XZ4BJb/Developing-RxInfer-jl_sufeCeIa#_lutfq_7F).

The `RxInfer` framework consists of three *core* packages developed by [ReactiveBayes](https://github.com/reactivebayes/):
## Learning Resources

- [`ReactiveMP.jl`](https://github.com/reactivebayes/ReactiveMP.jl) - the underlying message passing-based inference engine
- [`GraphPPL.jl`](https://github.com/reactivebayes/GraphPPL.jl) - model and constraints specification package
- [`Rocket.jl`](https://github.com/reactivebayes/Rocket.jl) - reactive extensions package for Julia
The community maintains educational content and tutorials on [Learnable Loop](https://learnableloop.com/#category=RxInfer), covering topics such as:
- Visualizing Forney Factor Graphs
- Sales forecasting with time-varying autoregressive models
- Hidden Markov models with control
- Applications of Active Inference across different domains

## JuliaCon 2023 presentation

Expand All @@ -217,6 +226,7 @@ Also check out the recorded presentation at the Julia User Group Munich meetup f
<a href="https://www.youtube.com/watch?v=KuluqEzFtm8"><img style="width: 100%" src="https://img.youtube.com/vi/KuluqEzFtm8/0.jpg"></a>
</p>


# License

[MIT License](LICENSE) Copyright (c) 2021-2024 BIASlab, 2024-present ReactiveBayes
4 changes: 2 additions & 2 deletions codemeta.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
"downloadUrl": "https://github.com/reactivebayes/RxInfer.jl/releases",
"issueTracker": "https://github.com/reactivebayes/RxInfer.jl/issues",
"name": "RxInfer.jl",
"version": "3.7.1",
"version": "3.8.3",
"description": "Julia package for automated, scalable and efficient Bayesian inference on factor graphs with reactive message passing. ",
"applicationCategory": "Statistics",
"developmentStatus": "active",
"readme": "https://reactivebayes.github.io/RxInfer.jl/stable/",
"softwareVersion": "3.7.1",
"softwareVersion": "3.8.3",
"keywords": [
"Bayesian inference",
"message passing",
Expand Down
2 changes: 2 additions & 0 deletions docs/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@ BenchmarkTools = "6e4b80f9-dd63-53aa-95a3-0cdb28fa8baf"
Cairo = "159f3aea-2a34-519c-b102-8c37f9878175"
Distributions = "31c24e10-a181-5473-b8eb-7969acd0382f"
Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4"
DocumenterMermaid = "a078cd44-4d9c-4618-b545-3ab9d77f9177"
ExponentialFamily = "62312e5e-252a-4322-ace9-a5f4bf9b357b"
ExponentialFamilyProjection = "17f509fa-9a96-44ba-99b2-1c5f01f0931b"
GraphPPL = "b3f8163a-e979-4e85-b43e-1f63d8c8b42c"
GraphPlot = "a2cc645c-3eea-5389-862e-a155d0052231"
GraphViz = "f526b714-d49f-11e8-06ff-31ed36ee7ee0"
Optimisers = "3bd65402-5787-11e9-1adc-39752487f4e2"
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
ReactiveMP = "a194aa59-28ba-4574-a09c-4a745416d6e3"
Expand Down
46 changes: 23 additions & 23 deletions docs/make.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using RxInfer
using Documenter
using DocumenterMermaid

## https://discourse.julialang.org/t/generation-of-documentation-fails-qt-qpa-xcb-could-not-connect-to-display/60988
## https://gr-framework.org/workstations.html#no-output
Expand Down Expand Up @@ -69,10 +70,13 @@ foreach(vcat(ExamplesOverviewPath, ExamplesCategoriesOverviewPaths)) do path
@warn "`$(path)` does not exist. Generating an empty overview. Use the `make examples` command to generate the overview and all examples."
mkpath(dirname(path))
open(path, "w") do f
write(f, """
$(isequal(path, ExamplesOverviewPath) ? "# [Examples overview](@id examples-overview)" : "")
The overview is missing. Use the `make examples` command to generate the overview and all examples.
""")
write(
f,
"""
$(isequal(path, ExamplesOverviewPath) ? "# [Examples overview](@id examples-overview)" : "")
The overview is missing. Use the `make examples` command to generate the overview and all examples.
"""
)
end
end
end
Expand All @@ -82,8 +86,10 @@ ExamplesPages = map(collect(pairs(ExamplesCategoriesPages))) do (label, info)
return info.title => info.pages
end

draft = get(ENV, "DOCS_DRAFT", "false") == "true"

makedocs(;
draft = false,
draft = draft,
warnonly = false,
modules = [RxInfer],
authors = "Bagaev Dmitry <[email protected]> and contributors",
Expand All @@ -105,22 +111,16 @@ 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 inference" => "manuals/inference/static.md",
"Streamline inference" => "manuals/inference/streamlined.md",
"Initialization" => "manuals/inference/initialization.md",
"Auto-updates" => "manuals/inference/autoupdates.md",
"Deterministic nodes" => "manuals/inference/delta-node.md",
"Non-conjugate inference" => "manuals/inference/nonconjugate.md",
"Undefined message update rules" => "manuals/inference/undefinedrules.md"
],
"Inference customization" => [
"Defining a custom node and rules" => "manuals/customization/custom-node.md",
"Inference results postprocessing" => "manuals/customization/postprocess.md",
],
"Debugging" => "manuals/debugging.md",
"Migration from v2 to v3" => "manuals/migration-guide-v2-v3.md"
"Inference specification" => ["Overview" => "manuals/inference/overview.md", "Static inference" => "manuals/inference/static.md", "Streamline inference" => "manuals/inference/streamlined.md", "Initialization" => "manuals/inference/initialization.md", "Auto-updates" => "manuals/inference/autoupdates.md", "Deterministic nodes" => "manuals/inference/delta-node.md", "Non-conjugate inference" => "manuals/inference/nonconjugate.md", "Undefined message update rules" => "manuals/inference/undefinedrules.md"],
"Inference customization" => ["Defining a custom node and rules" => "manuals/customization/custom-node.md", "Inference results postprocessing" => "manuals/customization/postprocess.md"],
"Debugging" => "manuals/debugging.md",
"Migration from v2 to v3" => "manuals/migration-guide-v2-v3.md",
"Sharp bits of RxInfer" => [
"Overview" => "manuals/sharpbits/overview.md",
"Rule Not Found Error" => "manuals/sharpbits/rule-not-found.md",
"Stack Overflow in Message Computations" => "manuals/sharpbits/stack-overflow-inference.md",
"Using `=` instead of `:=` for deterministic nodes" => "manuals/sharpbits/usage-colon-equality.md"
]
],
"Library" => [
"Model construction" => "library/model-construction.md",
Expand All @@ -131,11 +131,11 @@ makedocs(;
"Examples" => [
"Overview" => "examples/overview.md", # This must be auto-generated with `make examples`
ExamplesPages...,
"External examples" => "contributing/external-examples.md"
"Contribute with examples" => "contributing/examples.md"
],
"Contributing" => [
"Contribution guide" => "contributing/guide.md",
"Contribution guidelines"=> "contributing/guidelines.md",
"Contribution guidelines" => "contributing/guidelines.md",
"Contributing to the documentation" => "contributing/new-documentation.md",
"Contributing to the examples" => "contributing/new-example.md",
"Publishing a new release" => "contributing/new-release.md"
Expand Down
11 changes: 11 additions & 0 deletions docs/src/contributing/examples.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# [Contribute with examples](@id examples)

We welcome examples from the community that showcase RxInfer.jl in action! Whether you're working in machine learning, signal processing, robotics, computational biology, or any other domain - your contributions help others learn and explore probabilistic modeling with RxInfer.jl.

## Featured Examples

- **Active Inference with RxInfer.jl** - Dive into the realm of Active Inference guided by [Kobus Esterhuysen](https://www.linkedin.com/in/kobusesterhuysen/) at [Learnable Loop](https://learnableloop.com/#category=RxInfer).
- **Tutorial Series on RxInfer.jl** - Explore a series of engaging tutorial videos on RxInfer.jl's functionalities, presented by [@doggotodjl](https://www.youtube.com/@doggodotjl/search?query=RxInfer).

!!! note
If you're interested in contributing an example, we'd love to hear from you! Please initiate an issue or start a new discussion on our [GitHub repository](https://github.com/reactivebayes/RxInfer.jl) to get involved.
11 changes: 0 additions & 11 deletions docs/src/contributing/external-examples.md

This file was deleted.

7 changes: 6 additions & 1 deletion docs/src/manuals/comparison.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,12 @@ end
end
```

- **Expressiveness**: `RxInfer.jl` empowers users to elegantly and concisely craft models, closely mirroring probabilistic notation, thanks to Julia's macro capabilities. To illustrate this, let's consider the following model:
- **Expressiveness**: `RxInfer.jl` empowers users to elegantly and concisely craft models, closely mirroring probabilistic notation, thanks to Julia's macro capabilities.

!!! note
RxInfer uses `:=` for deterministic relationships (see [Using `=` instead of `:=` for deterministic nodes](@ref usage-colon-equality)) which might differ from other frameworks but enables powerful message-passing capabilities.

To illustrate the expressiveness, let's consider the following model:

$$\begin{aligned}
x & \sim \mathrm{Normal}(0.0, 1.0)\\
Expand Down
Loading

0 comments on commit 1f55b93

Please sign in to comment.