
ReactiveMP v6.0.0 Diff since v5.6.6 This is a major change in ReactiveMP that includes breaking changes, improvements, new documentation sections and many more! Added AbstractStreamPostprocessor abstraction unifying the old pipeline stages and the per-node scheduler argument under a single concept that postprocesses outbound message streams, marginal streams, and score streams uniformly postprocess_stream_of_outbound_messages, postprocess_stream_of_marginals, postprocess_stream_of_scores entry points with ::Nothing pass-through fallbacks CompositeStreamPostprocessor for chaining multiple postprocessors ScheduleOnStreamPostprocessor — direct successor of ScheduleOnPipelineStage plus 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) MessageProductContext struct 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 MethodError hint for mismatched handle_event signatures New annotations system: AnnotationDict, AbstractAnnotations, LogScaleAnnotations, InputArgumentsAnnotations post_rule_annotations! and post_product_annotations! callbacks for annotation processors @logscale value macro for setting log-scale annotations inside @rule bodies getannotations function for Message and Marginal Migration guide for v5 to v6 skip_initial(), skip_clamped(), skip_clamped_and_initial() filter operators replacing the MarginalSkipStrategy type hierarchy new_observation!(datavar, value) for pushing observed values into a DataVariable get_stream_of_inbound_messages, get_stream_of_outbound_messages accessors on NodeInterface and IndexedNodeInterface get_stream_of_marginals, set_stream_of_marginals! accessors on variables get_stream_of_predictions, set_stream_of_predictions! accessors on variables set_initial_marginal!, set_initial_message! for seeding variables before inference create_new_stream_of_inbound_messages! for allocating per-connection message streams Docstrings for MessageObservable, MarginalObservable, FunctionalDependencies, collect_functional_dependencies, RandomVariableActivationOptions, DataVariableActivationOptions, FactorNodeActivationOptions, and activate! methods Expanded documentation for variables (stream creation lifecycle per variable type), nodes (interfaces, activation), messages, and marginals Changed FactorNodeActivationOptions lost its pipeline and scheduler positional fields and gained a single postprocessor field RandomVariableActivationOptions renamed its scheduler field to stream_postprocessor; the default is now nothing (no-op) instead of AsapScheduler() getpipeline(options) and getscheduler(options) replaced by getpostprocessor(options) EqualityChain renamed its pipeline field to postprocessor Switched from ReTestItems to TestItemRunner for tests (#584) Made formatting checks stricter Removed variables/generic.jl; generic variable interface moved into variable.jl Replaced hardcoded DefaultMessageProdFn/DefaultMarginalProdFn with MessageProductContext Message{D, A} → Message{D} (type parameter A removed) Marginal{D, A} → Marginal{D} (type parameter A removed) Message and Marginal now carry an AnnotationDict instead of a typed addons tuple Rules no longer return (result, addons) tuples — just the result @call_rule no longer supports return_addons option; use annotations keyword with AnnotationDict MessageMapping.addons field → MessageMapping.annotations MessageProductContext gained annotations field for product-time annotation processors messagein(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 the AbstractStreamPostprocessor abstraction (see migration guide) LoggerPipelineStage — equivalent behaviour can be implemented via callbacks AsyncPipelineStage — use ScheduleOnStreamPostprocessor(AsyncScheduler()) instead DiscontinuePipelineStage — was unused; implement a custom AbstractStreamPostprocessor if needed schedule_updates(vars; pipeline_stage = ...) — construct a ScheduleOnStreamPostprocessor and pass it through the activation options instead getaddons — use getannotations instead getlogscale(::Message), getlogscale(::Marginal) — use getlogscale(getannotations(...)) instead getmemory, getmemoryaddon — use get_rule_input_arguments(getannotations(...)) instead AddonLogScale — replaced by LogScaleAnnotations (calling AddonLogScale() throws a descriptive error) AddonMemory — replaced by InputArgumentsAnnotations (calling AddonMemory() throws a descriptive error) AddonDebug — use callbacks instead AbstractAddon, multiply_addons, @invokeaddon message_mapping_addons, message_mapping_addon helper functions MarginalSkipStrategy abstract type and SkipClamped, SkipInitial, SkipClampedAndInitial, IncludeAll subtypes — use skip_clamped(), skip_initial(), skip_clamped_and_initial() filter operators instead apply_skip_filter, as_marginal_observable — no longer part of the public API messagein, messageout — use get_stream_of_inbound_messages, get_stream_of_outbound_messages getmarginal, getmarginals, getprediction, getpredictions — use get_stream_of_marginals, get_stream_of_predictions setmarginal!, setmarginals!, setmessage!, setmessages! — use set_initial_marginal!, set_initial_message! update! — use new_observation! create_messagein! — use create_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)
