Skip to content

Commit fed9137

Browse files
author
Jack Dunham
committed
The EachRegion adapter now flattens the nested Sweep/Region iterators into a single iterators over the regions.
The length of the iterator is then nsweeps * nregions.
1 parent 568c631 commit fed9137

File tree

1 file changed

+22
-13
lines changed

1 file changed

+22
-13
lines changed

src/solvers/adapters.jl

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,32 @@ compute!(adapter::NoComputeStep) = adapter
1717
NoComputeStep(adapter::NoComputeStep) = adapter
1818

1919
"""
20-
struct EachRegion{RegionIterator} <: AbstractNetworkIterator
20+
struct EachRegion{SweepIterator} <: AbstractNetworkIterator
2121
22-
Wapper adapter that returns a tuple (region, kwargs) at each step rather than the iterator
23-
itself.
22+
Adapter that flattens the each region iterator in the parent sweep iterator into a single
23+
iterator, returning `region => kwargs`.
2424
"""
25-
struct EachRegion{R<:RegionIterator} <: AbstractNetworkIterator
26-
parent::R
25+
struct EachRegion{SI<:SweepIterator} <: AbstractNetworkIterator
26+
parent::SI
2727
end
2828

29-
# Essential definitions
30-
Base.length(adapter::EachRegion) = length(adapter.parent)
31-
state(adapter::EachRegion) = state(adapter.parent)
32-
increment!(adapter::EachRegion) = state(adapter.parent)
29+
# In keeping with Julia convention.
30+
eachregion(iter::SweepIterator) = EachRegion(iter)
3331

32+
# Essential definitions
33+
function laststep(adapter::EachRegion)
34+
region_iter = region_iterator(adapter.parent)
35+
return laststep(adapter.parent) && laststep(region_iter)
36+
end
37+
function increment!(adapter::EachRegion)
38+
region_iter = region_iterator(adapter.parent)
39+
laststep(region_iter) ? increment!(adapter.parent) : increment!(region_iter)
40+
return adapter
41+
end
3442
function compute!(adapter::EachRegion)
35-
# Do the usual compute! for RegionIterator
36-
compute!(adapter.parent)
37-
# But now lets return something useful
38-
return current_region_plan(adapter)
43+
region_iter = region_iterator(adapter.parent)
44+
compute!(region_iter)
45+
return current_region_plan(region_iter)
46+
end
47+
3948
end

0 commit comments

Comments
 (0)