Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions src/DistributedFactorGraphs.jl
Original file line number Diff line number Diff line change
Expand Up @@ -331,7 +331,6 @@ const unstable_functions::Vector{Symbol} = [
:unpackBlob,
:getMimetype,
:getDataFormat,
:getMimetype,
:emptyTags!,
:ls,
:lsf,
Expand Down Expand Up @@ -370,7 +369,7 @@ const unstable_functions::Vector{Symbol} = [
# :emptyBlobstore!, #TODO maybe deprecate for just deleteBlobstore!
:MetadataTypes, #maybe make public after metadata stable
:getVariableTypeName,
:getStateKind,
# NOTE :getStateKind is declared `public` above, not unstable
:setTimestamp,
:setAgentMetadata!,
:setGraphMetadata!,
Expand Down
43 changes: 16 additions & 27 deletions src/GraphsDFG/services/blobentry_ops.jl
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,7 @@
# ==============================================================================

function DFG.addAgentBlobentry!(fg::GraphsDFG, agentlabel::Symbol, entry::Blobentry)
if haskey(fg.agents[agentlabel].blobentries, entry.label)
throw(LabelExistsError("Blobentry", entry.label))
end
push!(fg.agents[agentlabel].blobentries, entry.label => entry)
return entry
return DFG.addBlobentry!(getAgent(fg, agentlabel), entry)
end

function DFG.addAgentBlobentries!(
Expand All @@ -21,25 +17,20 @@ function DFG.addAgentBlobentries!(
end

function DFG.getAgentBlobentry(fg::GraphsDFG, agentlabel::Symbol, label::Symbol)
if !haskey(fg.agents[agentlabel].blobentries, label)
throw(LabelNotFoundError("Blobentry", label))
end
return fg.agents[agentlabel].blobentries[label]
return DFG.getBlobentry(getAgent(fg, agentlabel), label)
end

function DFG.getAgentBlobentries(
fg::GraphsDFG,
agentlabel::Symbol;
whereLabel::Union{Nothing, Function} = nothing,
whereMultihash::Union{Nothing, Function} = nothing,
)
entries = collect(values(fg.agents[agentlabel].blobentries))
filterDFG!(entries, whereLabel, getLabel)
return entries
return DFG.getBlobentries(getAgent(fg, agentlabel); whereLabel, whereMultihash)
end

function DFG.mergeAgentBlobentry!(dfg::GraphsDFG, agentlabel::Symbol, entry::Blobentry)
DFG.refBlobentries(dfg.agents[agentlabel])[getLabel(entry)] = entry
return 1
return DFG.mergeBlobentry!(getAgent(dfg, agentlabel), entry)
end

function DFG.mergeAgentBlobentries!(
Expand All @@ -50,13 +41,11 @@ function DFG.mergeAgentBlobentries!(
cnts = map(entries) do entry
return DFG.mergeAgentBlobentry!(dfg, agentlabel, entry)
end
return sum(cnts)
return sum(cnts; init = 0)
end

function DFG.deleteAgentBlobentry!(dfg::GraphsDFG, agentlabel::Symbol, label::Symbol)
!haskey(dfg.agents[agentlabel].blobentries, label) && return 0
delete!(dfg.agents[agentlabel].blobentries, label)
return 1
return DFG.deleteBlobentry!(getAgent(dfg, agentlabel), label)
end

function DFG.deleteAgentBlobentries!(
Expand All @@ -67,15 +56,15 @@ function DFG.deleteAgentBlobentries!(
cnts = map(labels) do label
return deleteAgentBlobentry!(dfg, agentlabel, label)
end
return sum(cnts)
return sum(cnts; init = 0)
end

function DFG.listAgentBlobentries(fg::GraphsDFG, agentlabel::Symbol)
return collect(keys(fg.agents[agentlabel].blobentries))
return DFG.listBlobentries(getAgent(fg, agentlabel))
end

function DFG.hasAgentBlobentry(dfg::GraphsDFG, agentlabel::Symbol, label::Symbol)
return haskey(dfg.agents[agentlabel].blobentries, label)
return DFG.hasBlobentry(getAgent(dfg, agentlabel), label)
end

# ==============================================================================
Expand Down Expand Up @@ -120,7 +109,7 @@ function DFG.mergeGraphBlobentries!(dfg::GraphsDFG, entries::Vector{Blobentry})
cnts = map(entries) do entry
return DFG.mergeGraphBlobentry!(dfg, entry)
end
return sum(cnts)
return sum(cnts; init = 0)
end

function DFG.deleteGraphBlobentry!(dfg::GraphsDFG, label::Symbol)
Expand All @@ -133,7 +122,7 @@ function DFG.deleteGraphBlobentries!(dfg::GraphsDFG, labels::Vector{Symbol})
cnts = map(labels) do label
return deleteGraphBlobentry!(dfg, label)
end
return sum(cnts)
return sum(cnts; init = 0)
end

function DFG.listGraphBlobentries(
Expand Down Expand Up @@ -193,7 +182,7 @@ function DFG.mergeVariableBlobentries!(
cnts = map(entries) do entry
return DFG.mergeVariableBlobentry!(dfg, vLbl, entry)
end
return sum(cnts)
return sum(cnts; init = 0)
end

function DFG.deleteVariableBlobentry!(dfg::GraphsDFG, label::Symbol, entryLabel::Symbol)
Expand All @@ -208,7 +197,7 @@ function DFG.deleteVariableBlobentries!(
cnts = map(labels) do label
return deleteVariableBlobentry!(dfg, varLabel, label)
end
return sum(cnts)
return sum(cnts; init = 0)
end

function DFG.listVariableBlobentries(dfg::GraphsDFG, variableLabel::Symbol)
Expand Down Expand Up @@ -259,7 +248,7 @@ function DFG.mergeFactorBlobentries!(
cnts = map(entries) do entry
return DFG.mergeFactorBlobentry!(dfg, fLbl, entry)
end
return sum(cnts)
return sum(cnts; init = 0)
end

function DFG.deleteFactorBlobentry!(dfg::GraphsDFG, label::Symbol, entryLabel::Symbol)
Expand All @@ -274,7 +263,7 @@ function DFG.deleteFactorBlobentries!(
cnts = map(labels) do label
return DFG.deleteFactorBlobentry!(dfg, facLabel, label)
end
return sum(cnts)
return sum(cnts; init = 0)
end

function DFG.listFactorBlobentries(dfg::GraphsDFG, factorLabel::Symbol)
Expand Down
8 changes: 4 additions & 4 deletions src/GraphsDFG/services/factor_ops.jl
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,10 @@ function DFG.deleteFactor!(dfg::GraphsDFG, label::Symbol)
return 1
end

function DFG.deleteFactors!(dfg::AbstractDFG, labels::Vector{Symbol})
count = sum(map(l->hasFactor(dfg, l), labels); init = 0)
rem_vertices!(dfg.g, map(l->dfg.g.labels[l], labels))
return count
function DFG.deleteFactors!(dfg::GraphsDFG, labels::Vector{Symbol})
fac_labels = filter(l -> hasFactor(dfg, l), labels)
rem_vertices!(dfg.g, map(l -> dfg.g.labels[l], fac_labels))
return length(fac_labels)
end

function DFG.deleteFactors!(dfg::AbstractDFG; kwargs...)
Expand Down
8 changes: 4 additions & 4 deletions src/GraphsDFG/services/state_ops.jl
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,14 @@ function DFG.mergeStates!(
cnt = asyncmap(varLabel_state_pairs) do (varLabel, state)
return mergeState!(dfg, varLabel, state)
end
return sum(cnt)
return sum(cnt; init = 0)
end

function DFG.mergeStates!(dfg::GraphsDFG, variableLabel::Symbol, states::Vector{<:State})
cnt = asyncmap(states) do state
return mergeState!(dfg, variableLabel, state)
end
return sum(cnt)
return sum(cnt; init = 0)
end

# =============================================================================
Expand All @@ -72,7 +72,7 @@ function DFG.deleteStates!(dfg::GraphsDFG, variableLabel::Symbol, labels::Vector
cnt = asyncmap(labels) do label
return deleteState!(dfg, variableLabel, label)
end
return sum(cnt)
return sum(cnt; init = 0)
end

function DFG.deleteStates!(
Expand All @@ -82,7 +82,7 @@ function DFG.deleteStates!(
cnt = asyncmap(varLabel_stateLabel_pairs) do (varLabel, stateLabel)
return deleteState!(dfg, varLabel, stateLabel)
end
return sum(cnt)
return sum(cnt; init = 0)
end

# =============================================================================
Expand Down
7 changes: 4 additions & 3 deletions src/GraphsDFG/services/variable_ops.jl
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,13 @@ function DFG.deleteVariable!(dfg::GraphsDFG, label::Symbol)#::Tuple{AbstractGrap
end

function DFG.deleteVariables!(dfg::GraphsDFG, labels::Vector{Symbol})
# skip labels that do not exist, consistent with deleteVariable!
var_labels = filter(l -> hasVariable(dfg, l), labels)

# collect factor neighbors for all variables before any deletion
fac_labels = mapreduce(l -> listNeighbors(dfg, l), union, labels; init = Symbol[])
fac_labels = mapreduce(l -> listNeighbors(dfg, l), union, var_labels; init = Symbol[])
fac_labels = filter(l -> hasFactor(dfg, l), fac_labels)

var_labels = filter(l -> hasVariable(dfg, l), labels)

count = length(var_labels) + length(fac_labels)
vs = map(l -> dfg.g.labels[l], [var_labels; fac_labels])
rem_vertices!(dfg.g, vs)
Expand Down
8 changes: 2 additions & 6 deletions src/entities/Blobentry.jl
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ StructUtils.@kwarg struct Blobentry
metadata::JSONText = JSONText("{}")
""" When the Blob itself was first created. Serialized as an ISO 8601 string."""
timestamp::TimeDateZone = now_tdz()
""" DFG serialization format version."""
""" DFG types serialization format version."""
version::VersionNumber = DFG.DFG_TYPES_VERSION
end
Expand Down Expand Up @@ -162,7 +161,7 @@ end
deleteBlobentry!(node, entry) = deleteBlobentry!(node, getLabel(entry))

function deleteBlobentries!(node, labels::Vector{Symbol})
return sum(deleteBlobentry!.(node, labels))
return sum(deleteBlobentry!.(node, labels); init = 0)
end

"""
Expand Down Expand Up @@ -197,11 +196,8 @@ Checks the integrity of a blob against the hashes stored in the given `Blobentry
- Returns `nothing` if the multihash algorithm is unregistered.
"""
function verifyBlob(entry::Blobentry, blob)
# Reverse lookup: multicodec code -> hash function
code_to_func = Dict{UInt64, Function}(v => k for (k, v) in MULTIHASH_FUNCTIONS)

code, stored_digest = decode(entry.multihash)
func = get(code_to_func, code, nothing)
func = get(MULTIHASH_CODES, code, nothing)
if isnothing(func)
@warn "verifyBlob: unregistered multihash algorithm code $(repr(code)), skipping multihash check"
return nothing
Expand Down
2 changes: 1 addition & 1 deletion src/entities/Bloblet.jl
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ function deleteBloblet!(node, label::Symbol)
end

function deleteBloblets!(node, labels::Vector{Symbol})
return sum(l -> deleteBloblet!(node, l), labels)
return sum(l -> deleteBloblet!(node, l), labels; init = 0)
end

"""
Expand Down
2 changes: 2 additions & 0 deletions src/entities/Multihash.jl
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ const MULTIHASH_FUNCTIONS = Dict{Function, UInt64}(
sha3_512 => 0x14,
sha3_256 => 0x16,
)
# Reverse lookup: multicodec code -> hash function
const MULTIHASH_CODES = Dict{UInt64, Function}(v => k for (k, v) in MULTIHASH_FUNCTIONS)

@nonstruct struct Multihash
bytes::Vector{UInt8}
Expand Down
2 changes: 1 addition & 1 deletion src/services/blob_save_load.jl
Original file line number Diff line number Diff line change
Expand Up @@ -227,7 +227,7 @@ function saveImage_Variable!(
provider::Symbol = :default;
entry_kwargs...,
)
mimetype = get(entry_kwargs, :mimeType, MIME("image/png"))
mimetype = get(entry_kwargs, :mimetype, MIME("image/png"))
format = getDataFormat(mimetype)
isnothing(format) &&
throw(ArgumentError("Unsupported MIME type for image: $(mimetype)"))
Expand Down
Loading