1+ # agnostic factors for internal use
12
23
34"""
4- $SIGNATURES
5-
6- Calculate the proposals and products on `destvert` using `factors` in factor graph `dfg`.
7-
8- Notes
9- - Returns tuple of product and whether full dimensional (=true) or partial (=false).
10- - `N` determines the number of samples to draw from the marginal.
11- - `dens` can contain mixed full and partial dimension `ManifoldKernelDensity` beliefs
5+ $(TYPEDEF)
126"""
13- function predictbelief ( dfg:: AbstractDFG ,
14- destvert:: DFGVariable ,
15- factors:: Vector{<:DFGFactor} ;
16- solveKey:: Symbol = :default ,
17- dens = Vector {ManifoldKernelDensity} (),
18- N:: Int = maximum ([length (getPoints (getBelief (destvert, solveKey))); getSolverParams (dfg). N]),
19- needFreshMeasurements:: Bool = true ,
20- dbg:: Bool = false ,
21- logger= ConsoleLogger () )
22- #
23-
24- # get proposal beliefs
25- destlbl = getLabel (destvert)
26- inferdim = proposalbeliefs! (dfg, destlbl, factors, dens, solveKey= solveKey, N= N, dbg= dbg)
27-
28- # take the product
29- # TODO , make sure oldpts has right number of points!
30- oldBel = getBelief (dfg, destlbl, solveKey)
31- oldpts = if Npts (oldBel) == N
32- getPoints (oldBel)
33- else
34- sample (oldBel, N)[1 ]
35- end
36-
37- varType = getVariableType (dfg, destlbl)
38- pGM = AMP. productbelief (oldpts, getManifold (varType), dens, N, dbg= dbg, logger= logger, asPartial= false )
39-
40- return pGM, sum (inferdim)
7+ mutable struct GenericMarginal <: AbstractRelativeRoots
8+ Zij:: Array{Float64,1}
9+ Cov:: Array{Float64,1}
10+ W:: Array{Float64,1}
11+ GenericMarginal () = new ()
12+ GenericMarginal (a,b,c) = new (a,b,c)
4113end
4214
43- predictbelief (dfg:: AbstractDFG ,
44- destlbl:: Symbol ,
45- fctlbls:: AbstractVector{Symbol} ;
46- kw... ) = predictbelief (dfg, getVariable (dfg, destlbl), getFactor .(dfg, fctlbls); kw... )
47- #
48-
49- predictbelief (dfg:: AbstractDFG ,
50- destlbl:: Symbol ,
51- :: Colon ;
52- kw... ) = predictbelief (dfg, destlbl, getNeighbors (dfg, destlbl); kw... )
53- #
54-
55-
56- """
57- $(SIGNATURES)
58-
59- Using factor graph object `dfg`, project belief through connected factors
60- (convolution with likelihood) to variable `sym` followed by a approximate functional product.
61-
62- Return: product belief, full proposals, partial dimension proposals, labels
63- """
64- function localProduct (dfg:: AbstractDFG ,
65- sym:: Symbol ;
66- solveKey:: Symbol = :default ,
67- N:: Int = maximum ([length (getPoints (getBelief (dfg, sym, solveKey))); getSolverParams (dfg). N]),
68- dbg:: Bool = false ,
69- logger= ConsoleLogger () )
70- #
71- # vector of all neighbors as Symbols
72- lb = getNeighbors (dfg, sym)
73-
74- # # get proposal beliefs
75- dens = Array {ManifoldKernelDensity,1} ()
76- # partials = Dict{Any, Vector{ManifoldKernelDensity}}()
77- pGM, sinfd = predictbelief (dfg, sym, lb, solveKey= solveKey, logger= logger, dens= dens, N= N )
7815
79- # make manifold belief from product
80- vari = getVariable (dfg, sym)
81- pp = AMP. manikde! (getManifold (getVariableType (vari)), pGM )
16+ sampleFactor (:: CalcFactor{<:GenericMarginal} ,N:: Int ) = (0 ,)
8217
83- return pp, dens, lb, sinfd
18+ mutable struct PackedGenericMarginal <: PackedInferenceType
19+ Zij:: Array{Float64,1}
20+ Cov:: Array{Float64,1}
21+ W:: Array{Float64,1}
22+ PackedGenericMarginal () = new ()
23+ PackedGenericMarginal (a,b,c) = new (a,b,c)
8424end
85- localProduct (dfg:: AbstractDFG , lbl:: AbstractString ; kw... ) = localProduct (dfg, Symbol (lbl); kw... )
86-
87-
88-
89-
90- """
91- $SIGNATURES
92-
93- Basic wrapper to take local product and then set the value of `sym` in `dfg`.
94-
95- Notes
96- - returns `::Tuple{ManifoldKernelDensity, Float64, Vector{Symbol}}`
97-
98- DevNotes:
99- - Unknown issue first occurred here near IIF v0.8.4 tag, recorded case at 2020-01-17T15:26:17.673
100- """
101- function localProductAndUpdate! (dfg:: AbstractDFG ,
102- sym:: Symbol ,
103- setkde:: Bool = true ,
104- logger= ConsoleLogger ();
105- solveKey:: Symbol = :default )
106- #
107- # calculate new points for sym using existing structure around sym in dfg
108- newPts, dens, lbl, infdim = localProduct (dfg, sym, solveKey= solveKey, N= getSolverParams (dfg). N, logger= logger)
109- # maybe update dfg sym with newly calculated points
110- setkde && 0 < length (getPoints (newPts)) ? setValKDE! (dfg, sym, newPts, false , infdim, solveKey= solveKey) : nothing
111-
112- return newPts, infdim, lbl
25+ function convert (:: Type{PackedGenericMarginal} , d:: GenericMarginal )
26+ return PackedGenericMarginal (d. Zij, d. Cov, d. W)
27+ end
28+ function convert (:: Type{GenericMarginal} , d:: PackedGenericMarginal )
29+ return GenericMarginal (d. Zij, d. Cov, d. W)
11330end
11431
115-
116-
117- #
32+ # ------------------------------------------------------------
0 commit comments