Skip to content

Commit

Permalink
Merge pull request #1277 from daniel-thom/issue-1274
Browse files Browse the repository at this point in the history
Remove workaround for set_number!(::ACBus, ::Int)
  • Loading branch information
daniel-thom authored Feb 4, 2025
2 parents 36e4345 + 9fd6573 commit 75d6290
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 15 deletions.
12 changes: 10 additions & 2 deletions src/base.jl
Original file line number Diff line number Diff line change
Expand Up @@ -2623,11 +2623,19 @@ end
Set the number of a bus.
"""
function set_bus_number!(sys::System, bus::ACBus, number::Int)
throw_if_not_attached(bus, sys)

orig = get_number(bus)
if number == orig
return
end

if number in sys.bus_numbers
throw(ArgumentError("bus number $number is already stored in the system"))
end
bus.number = number
push!(sys.bus_numbers, number)

set_number!(bus, number)
replace!(sys.bus_numbers, orig => number)
return
end

Expand Down
18 changes: 5 additions & 13 deletions src/parsers/psse_metadata_reimport.jl
Original file line number Diff line number Diff line change
Expand Up @@ -75,19 +75,11 @@ function remap_bus_numbers!(sys::System, bus_number_mapping)
old_number = get_number(bus)
new_number = parse(Int, bus_number_mapping[old_number])
if new_number != old_number
if new_number in get_bus_numbers(sys)
# We would only reach this case if one bus's PSS/E number is another bus's
# Sienna number. That never happens because _psse_bus_numbers on the
# exporting side guarantees that bus numbers that are already compliant with
# the PSS/E spec will not be changed.
throw(
ArgumentError(
"Trying to remap bus number $old_number to $new_number, which is already a bus number",
),
)
end
replace!(sys.bus_numbers, old_number => new_number)
set_number!(bus, new_number)
# This will throw an exception if one bus's PSS/E number is another bus's
# Sienna number. That never happens because _psse_bus_numbers on the
# exporting side guarantees that bus numbers that are already compliant with
# the PSS/E spec will not be changed.
set_bus_number!(sys, bus, new_number)
end
end
end
Expand Down
18 changes: 18 additions & 0 deletions test/test_system.jl
Original file line number Diff line number Diff line change
Expand Up @@ -625,5 +625,23 @@ end
@test orig != new_number
set_bus_number!(sys, bus1, new_number)
@test get_number(bus1) == new_number
bus_numbers = get_bus_numbers(sys)
@test new_number in bus_numbers
@test !(orig in bus_numbers)

# Ensure that the no-op case works.
set_bus_number!(sys, bus1, new_number)
@test get_number(bus1) == new_number
@test new_number in get_bus_numbers(sys)

# Ensure that duplicate numbers are blocked.
@test_throws ArgumentError set_bus_number!(sys, bus1, get_number(bus2))

# Ensure that you can't change an unattached bus.
remove_component!(sys, bus1)
@test_throws ArgumentError set_bus_number!(sys, bus1, new_number + 1)

# Ensure that this is exported. This can be deleted in PSY5.
set_number!(bus1, new_number + 2)
@test get_number(bus1) == new_number + 2
end

0 comments on commit 75d6290

Please sign in to comment.