Releases: ReactiveBayes/ReactiveMP.jl
Releases · ReactiveBayes/ReactiveMP.jl
Release list
v6.3.3
ReactiveMP v6.3.3
Merged pull requests:
- Fix structured VMP deadlock with 3+ mutually-dependent clusters (#344) (#620) (@gauraaansh)
v6.3.2
ReactiveMP v6.3.2
Merged pull requests:
- Fix spurious extra mean(q_γ) in softdot mean-field average energy (#616) (@bvdmitri)
- 🤖 Auto-format Julia code (#617) (@github-actions[bot])
- ci: add 60-minute timeout to the test job (#618) (@bvdmitri)
- 🤖 Auto-format Julia code (#619) (@github-actions[bot])
Closed issues:
- softdot mean-field @average_energy has a spurious extra mean(q_γ) on the cross term (#615)
v6.3.1
ReactiveMP v6.3.1
Merged pull requests:
- Fix KeyError in InputArgumentsAnnotations for clamped messages (#614) (@gauraaansh)
v6.3.0
ReactiveMP v6.3.0
Merged pull requests:
- feat(ar): ConjugateAR node with structured MvNormalGamma (θ, γ) posterior (#612) (@RetrospectiveRotations)
v6.2.0
v6.1.1
v6.1.0
ReactiveMP v6.1.0
Merged pull requests:
- Add :compact-aware Base.show methods for callback events and supporting types (#602) (@RetrospectiveRotations)
Closed issues:
- [Task]: Create show methods for Events (#599)
v6.0.0
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)
v5.6.6
ReactiveMP v5.6.6
Merged pull requests:
v5.6.5
ReactiveMP v5.6.5
Merged pull requests:
- 294 rule marginalrule and average energy should check interface names (#545) (@abpolym)
- Add issue templates to ReactiveMP (#558) (@wouterwln)
- Remove vibe coded required fields (#562) (@wouterwln)
- Remove Requires.jl dependency (#564) (@wouterwln)
MvNormalWishartnode implementation (#565) (@esther-van-pelt)- Fix documentation build (#567) (@bvdmitri)
- 🤖 Auto-format Julia code (#568) (@github-actions[bot])
- 🤖 Auto-format Julia code (#570) (@github-actions[bot])
- Optimize double loops in CT node (#571) (@Nimrais)
- 🤖 Auto-format Julia code (#572) (@github-actions[bot])
- CompatHelper: bump compat for Optim to 2, (keep existing compat) (#574) (@github-actions[bot])
Closed issues:
- Problems with Laplace approximation method (#74)
- Propagate log of Categorical distribution parameters? (#75)
- Allow user to choose between safe/unsafe/fastcholesky inverse in Gaussian nodes (#76)
- Importance sampling for GammaMixture support. (#84)
- Complete optimization procedure for multivariate and matrix variate random variables. (#133)
- Multiple
RequireMarginalswith SP andPointMassconstraint do not update/ask for missing rule (#242) - Extend logpdf messages with importance distributions (#252)
PointMassinputs do not carry scale factors. (#254)- Addons do not combine nicely with functional form constraints (#258)
- Add inplace
mul!withStandardBasisVector(#288) @rule,@marginalruleand@average_energyshould check interface names (#294)- Free energy computations with
UniformScalingare broken (#340) - Speed up backward message for
Linearization(#342) - The computations of rules for ContinuousTransition node can be improved (#368)
- Many nodes have undocumented functional form (#400)
- [Task]: MvNormalWishart node to enable joint μ–Λ priors for NormalMixture (#542)
- Deprecated extension? (#547)