Add Optimization interface, add greedy optimizer, add some functionality to CDCost

This commit is contained in:
2023-11-20 19:07:05 +01:00
parent c73053f991
commit 1e0e699e6d
7 changed files with 92 additions and 5 deletions

View File

@ -2,7 +2,10 @@ import Base.iterate
const _POSSIBLE_OPERATIONS_FIELDS = fieldnames(PossibleOperations)
function iterate(possibleOperations::PossibleOperations)
_POIteratorStateType =
NamedTuple{(:result, :state), Tuple{Union{NodeFusion, NodeReduction, NodeSplit}, Tuple{Symbol, Int64}}}
@inline function iterate(possibleOperations::PossibleOperations)::Union{Nothing, _POIteratorStateType}
for fieldname in _POSSIBLE_OPERATIONS_FIELDS
iterator = iterate(getfield(possibleOperations, fieldname))
if (!isnothing(iterator))
@ -13,7 +16,7 @@ function iterate(possibleOperations::PossibleOperations)
return nothing
end
function iterate(possibleOperations::PossibleOperations, state)
@inline function iterate(possibleOperations::PossibleOperations, state)::Union{Nothing, _POIteratorStateType}
newStateSym = state[1]
newStateIt = iterate(getfield(possibleOperations, newStateSym), state[2])
if !isnothing(newStateIt)