Published April 17, 2026
| Version v6.0.0
Software
Open
ReactiveMP.jl: a Julia package for automatic Bayesian inference on a factor graph with reactive message passing.
Description
ReactiveMP v6.0.0
This is a major change in ReactiveMP that includes breaking changes, improvements, new documentation sections and many more!
Added
AbstractStreamPostprocessorabstraction unifying the old pipeline stages and the per-nodeschedulerargument under a single concept that postprocesses outbound message streams, marginal streams, and score streams uniformlypostprocess_stream_of_outbound_messages,postprocess_stream_of_marginals,postprocess_stream_of_scoresentry points with::Nothingpass-through fallbacksCompositeStreamPostprocessorfor chaining multiple postprocessorsScheduleOnStreamPostprocessor— direct successor ofScheduleOnPipelineStageplus the per-node scheduler, applies a Rocket.jl scheduler to all three stream kinds- Marginal streams and score streams now go through stream postprocessors (previously only outbound message streams did)
- Documentation page for stream postprocessors
- Callback/event system for hooking into message passing steps (rule calls, message products, form constraints, marginal computation)
MessageProductContextstruct to bundle product computation settings and callbacks- Labels for variables (
RandomVariable,ConstVariable,DataVariable) - Docstrings for variable types, form constraints, and related functions
- Documentation page for callbacks
MethodErrorhint for mismatchedhandle_eventsignatures- New annotations system:
AnnotationDict,AbstractAnnotations,LogScaleAnnotations,InputArgumentsAnnotations post_rule_annotations!andpost_product_annotations!callbacks for annotation processors@logscale valuemacro for setting log-scale annotations inside@rulebodiesgetannotationsfunction forMessageandMarginal- Migration guide for v5 to v6
skip_initial(),skip_clamped(),skip_clamped_and_initial()filter operators replacing theMarginalSkipStrategytype hierarchynew_observation!(datavar, value)for pushing observed values into aDataVariableget_stream_of_inbound_messages,get_stream_of_outbound_messagesaccessors onNodeInterfaceandIndexedNodeInterfaceget_stream_of_marginals,set_stream_of_marginals!accessors on variablesget_stream_of_predictions,set_stream_of_predictions!accessors on variablesset_initial_marginal!,set_initial_message!for seeding variables before inferencecreate_new_stream_of_inbound_messages!for allocating per-connection message streams- Docstrings for
MessageObservable,MarginalObservable,FunctionalDependencies,collect_functional_dependencies,RandomVariableActivationOptions,DataVariableActivationOptions,FactorNodeActivationOptions, andactivate!methods - Expanded documentation for variables (stream creation lifecycle per variable type), nodes (interfaces, activation), messages, and marginals
Changed
FactorNodeActivationOptionslost itspipelineandschedulerpositional fields and gained a singlepostprocessorfieldRandomVariableActivationOptionsrenamed itsschedulerfield tostream_postprocessor; the default is nownothing(no-op) instead ofAsapScheduler()getpipeline(options)andgetscheduler(options)replaced bygetpostprocessor(options)EqualityChainrenamed itspipelinefield topostprocessor- Switched from
ReTestItemstoTestItemRunnerfor tests (#584) - Made formatting checks stricter
- Removed
variables/generic.jl; generic variable interface moved intovariable.jl - Replaced hardcoded
DefaultMessageProdFn/DefaultMarginalProdFnwithMessageProductContext Message{D, A}→Message{D}(type parameterAremoved)Marginal{D, A}→Marginal{D}(type parameterAremoved)MessageandMarginalnow carry anAnnotationDictinstead of a typed addons tuple- Rules no longer return
(result, addons)tuples — just the result @call_ruleno longer supportsreturn_addonsoption; useannotationskeyword withAnnotationDictMessageMapping.addonsfield →MessageMapping.annotationsMessageProductContextgainedannotationsfield for product-time annotation processorsmessagein(interface)→get_stream_of_inbound_messages(interface)messageout(interface)→get_stream_of_outbound_messages(interface)getmarginal(variable)/getmarginals→get_stream_of_marginals(variable)getprediction(variable)/getpredictions→get_stream_of_predictions(variable)setmarginal!(variable, value)→set_initial_marginal!(variable, value)setmessage!(variable, value)→set_initial_message!(variable, value)update!(datavar, value)→new_observation!(datavar, value)
Removed
AbstractPipelineStage,EmptyPipelineStage,CompositePipelineStage,ScheduleOnPipelineStage,apply_pipeline_stage,collect_pipeline,+composition — replaced by theAbstractStreamPostprocessorabstraction (see migration guide)LoggerPipelineStage— equivalent behaviour can be implemented via callbacksAsyncPipelineStage— useScheduleOnStreamPostprocessor(AsyncScheduler())insteadDiscontinuePipelineStage— was unused; implement a customAbstractStreamPostprocessorif neededschedule_updates(vars; pipeline_stage = ...)— construct aScheduleOnStreamPostprocessorand pass it through the activation options insteadgetaddons— usegetannotationsinsteadgetlogscale(::Message),getlogscale(::Marginal)— usegetlogscale(getannotations(...))insteadgetmemory,getmemoryaddon— useget_rule_input_arguments(getannotations(...))insteadAddonLogScale— replaced byLogScaleAnnotations(callingAddonLogScale()throws a descriptive error)AddonMemory— replaced byInputArgumentsAnnotations(callingAddonMemory()throws a descriptive error)AddonDebug— use callbacks insteadAbstractAddon,multiply_addons,@invokeaddonmessage_mapping_addons,message_mapping_addonhelper functionsMarginalSkipStrategyabstract type andSkipClamped,SkipInitial,SkipClampedAndInitial,IncludeAllsubtypes — useskip_clamped(),skip_initial(),skip_clamped_and_initial()filter operators insteadapply_skip_filter,as_marginal_observable— no longer part of the public APImessagein,messageout— useget_stream_of_inbound_messages,get_stream_of_outbound_messagesgetmarginal,getmarginals,getprediction,getpredictions— useget_stream_of_marginals,get_stream_of_predictionssetmarginal!,setmarginals!,setmessage!,setmessages!— useset_initial_marginal!,set_initial_message!update!— usenew_observation!create_messagein!— usecreate_new_stream_of_inbound_messages!
Merged pull requests:
- 🤖 Auto-format Julia code (#583) (@github-actions[bot])
- use TestItemRunner instead of ReTestItems (#584) (@bvdmitri)
- 🤖 Auto-format Julia code (#585) (@github-actions[bot])
- Implement event handler system for message passing and callbacks (#587) (@bvdmitri)
- Trace ID to link before and after events (#589) (@fonsp)
- gitignore agents md (#591) (@fonsp)
- Run
make format(#593) (@fonsp) - Use Base.sprint for rule_tests (#594) (@fonsp)
- Better trace ids (#595) (@bvdmitri)
- Refactor addon system to annotations (#596) (@bvdmitri)
- 🤖 Auto-format Julia code (#597) (@github-actions[bot])
- Release 6 (#600) (@bvdmitri)
Notes
Files
ReactiveBayes/ReactiveMP.jl-v6.0.0.zip
Files
(737.2 kB)
| Name | Size | Download all |
|---|---|---|
|
md5:47b702b2e780ea6c32c2183c0e338e0b
|
737.2 kB | Preview Download |
Additional details
Related works
- Is supplement to
- Software: https://github.com/ReactiveBayes/ReactiveMP.jl/tree/v6.0.0 (URL)
Software
- Repository URL
- https://github.com/ReactiveBayes/ReactiveMP.jl