Skip to content

Commit c08cfa5

Browse files
authored
Delete the "del" flag (#1058)
* Delete del * Fix a typo * Add HISTORY entry about del
1 parent 7311465 commit c08cfa5

File tree

4 files changed

+21
-48
lines changed

4 files changed

+21
-48
lines changed

HISTORY.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ Other functions such as `tilde_assume` and `assume` (and their `observe` counter
5050
Note that this was effectively already the case in DynamicPPL 0.37 (where they were just wrappers around each other).
5151
The separation of these functions was primarily implemented to avoid performing extra work where unneeded (e.g. to not calculate the log-likelihood when `PriorContext` was being used). This functionality has since been replaced with accumulators (see the 0.37 changelog for more details).
5252

53+
### Removal of the `"del"` flag
54+
55+
Previously `VarInfo` (or more correctly, the `Metadata` object within a `VarInfo`), had a flag called `"del"` for all variables. If it was set to `true` the variable was to be overwritten with a new value at the next evaluation. The new `InitContext` and related changes above make this flag unnecessary, and it has been removed.
56+
5357
**Other changes**
5458

5559
### Reimplementation of functions using `InitContext`

src/threadsafe.jl

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -185,10 +185,8 @@ end
185185
values_as(vi::ThreadSafeVarInfo) = values_as(vi.varinfo)
186186
values_as(vi::ThreadSafeVarInfo, ::Type{T}) where {T} = values_as(vi.varinfo, T)
187187

188-
function unset_flag!(
189-
vi::ThreadSafeVarInfo, vn::VarName, flag::String, ignoreable::Bool=false
190-
)
191-
return unset_flag!(vi.varinfo, vn, flag, ignoreable)
188+
function unset_flag!(vi::ThreadSafeVarInfo, vn::VarName, flag::String)
189+
return unset_flag!(vi.varinfo, vn, flag)
192190
end
193191
function is_flagged(vi::ThreadSafeVarInfo, vn::VarName, flag::String)
194192
return is_flagged(vi.varinfo, vn, flag)

src/varinfo.jl

Lines changed: 9 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -423,7 +423,6 @@ Construct an empty type unstable instance of `Metadata`.
423423
function Metadata()
424424
vals = Vector{Real}()
425425
flags = Dict{String,BitVector}()
426-
flags["del"] = BitVector()
427426
flags["trans"] = BitVector()
428427

429428
return Metadata(
@@ -887,12 +886,7 @@ function set_flag!(md::Metadata, vn::VarName, flag::String)
887886
end
888887

889888
function set_flag!(vnv::VarNamedVector, ::VarName, flag::String)
890-
if flag == "del"
891-
# The "del" flag is effectively always set for a VarNamedVector, so this is a no-op.
892-
else
893-
throw(ErrorException("Flag $flag not valid for VarNamedVector"))
894-
end
895-
return vnv
889+
throw(ErrorException("VarNamedVector does not support flags; Tried to set $(flag)."))
896890
end
897891

898892
####
@@ -1710,7 +1704,7 @@ function BangBang.push!!(vi::VarInfo, vn::VarName, r, dist::Distribution)
17101704
[1:length(val)],
17111705
val,
17121706
[dist],
1713-
Dict{String,BitVector}("trans" => [false], "del" => [false]),
1707+
Dict{String,BitVector}("trans" => [false]),
17141708
)
17151709
vi = Accessors.@set vi.metadata[sym] = md
17161710
else
@@ -1744,7 +1738,6 @@ function Base.push!(meta::Metadata, vn, r, dist)
17441738
push!(meta.ranges, (l + 1):(l + n))
17451739
append!(meta.vals, val)
17461740
push!(meta.dists, dist)
1747-
push!(meta.flags["del"], false)
17481741
push!(meta.flags["trans"], false)
17491742
return meta
17501743
end
@@ -1770,42 +1763,25 @@ function is_flagged(metadata::Metadata, vn::VarName, flag::String)
17701763
return metadata.flags[flag][getidx(metadata, vn)]
17711764
end
17721765
function is_flagged(::VarNamedVector, ::VarName, flag::String)
1773-
if flag == "del"
1774-
return true
1775-
else
1776-
throw(ErrorException("Flag $flag not valid for VarNamedVector"))
1777-
end
1766+
throw(ErrorException("VarNamedVector does not support flags; Tried to read $(flag)."))
17781767
end
17791768

1780-
# TODO(mhauru) The "ignorable" argument is a temporary hack while developing VarNamedVector,
1781-
# but still having to support the interface based on Metadata too
17821769
"""
1783-
unset_flag!(vi::VarInfo, vn::VarName, flag::String, ignorable::Bool=false
1770+
unset_flag!(vi::VarInfo, vn::VarName, flag::String
17841771
17851772
Set `vn`'s value for `flag` to `false` in `vi`.
1786-
1787-
Setting some flags for some `VarInfo` types is not possible, and by default attempting to do
1788-
so will error. If `ignorable` is set to `true` then this will silently be ignored instead.
17891773
"""
1790-
function unset_flag!(vi::VarInfo, vn::VarName, flag::String, ignorable::Bool=false)
1791-
unset_flag!(getmetadata(vi, vn), vn, flag, ignorable)
1774+
function unset_flag!(vi::VarInfo, vn::VarName, flag::String)
1775+
unset_flag!(getmetadata(vi, vn), vn, flag)
17921776
return vi
17931777
end
1794-
function unset_flag!(metadata::Metadata, vn::VarName, flag::String, ignorable::Bool=false)
1778+
function unset_flag!(metadata::Metadata, vn::VarName, flag::String)
17951779
metadata.flags[flag][getidx(metadata, vn)] = false
17961780
return metadata
17971781
end
17981782

1799-
function unset_flag!(vnv::VarNamedVector, ::VarName, flag::String, ignorable::Bool=false)
1800-
if ignorable
1801-
return vnv
1802-
end
1803-
if flag == "del"
1804-
throw(ErrorException("The \"del\" flag cannot be unset for VarNamedVector"))
1805-
else
1806-
throw(ErrorException("Flag $flag not valid for VarNamedVector"))
1807-
end
1808-
return vnv
1783+
function unset_flag!(vnv::VarNamedVector, ::VarName, flag::String)
1784+
throw(ErrorException("VarNamedVector does not support flags; Tried to unset $(flag)."))
18091785
end
18101786

18111787
# TODO: Maybe rename or something?

test/varinfo.jl

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,6 @@ function randr(vi::DynamicPPL.VarInfo, vn::VarName, dist::Distribution)
2222
r = rand(dist)
2323
push!!(vi, vn, r, dist)
2424
r
25-
elseif DynamicPPL.is_flagged(vi, vn, "del")
26-
DynamicPPL.unset_flag!(vi, vn, "del")
27-
r = rand(dist)
28-
vi[vn] = DynamicPPL.tovec(r)
29-
r
3025
else
3126
vi[vn]
3227
end
@@ -300,14 +295,14 @@ end
300295

301296
push!!(vi, vn_x, r, dist)
302297

303-
# del is set by default
304-
@test !is_flagged(vi, vn_x, "del")
298+
# trans is set by default
299+
@test !is_flagged(vi, vn_x, "trans")
305300

306-
set_flag!(vi, vn_x, "del")
307-
@test is_flagged(vi, vn_x, "del")
301+
set_flag!(vi, vn_x, "trans")
302+
@test is_flagged(vi, vn_x, "trans")
308303

309-
unset_flag!(vi, vn_x, "del")
310-
@test !is_flagged(vi, vn_x, "del")
304+
unset_flag!(vi, vn_x, "trans")
305+
@test !is_flagged(vi, vn_x, "trans")
311306
end
312307
vi = VarInfo()
313308
test_varinfo!(vi)

0 commit comments

Comments
 (0)