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
10 changes: 10 additions & 0 deletions src/InfrastructureSystems.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@ export PiecewisePointCurve, PiecewiseIncrementalCurve, PiecewiseAverageCurve
export TimeSeriesLinearCurve, TimeSeriesQuadraticCurve, TimeSeriesPiecewisePointCurve
export TimeSeriesPiecewiseIncrementalCurve, TimeSeriesPiecewiseAverageCurve

# Units interface: declared here, methods implemented by domain packages
# (e.g., PowerSystems.jl provides power-domain `get_value`/`set_value` methods).
"Get a field value with optional unit conversion. Methods are provided by domain packages."
function get_value end
"Set a field value with optional unit conversion. Methods are provided by domain packages."
function set_value end
export get_value, set_value

import Base: @kwdef
import CSV
import DataFrames
Expand Down Expand Up @@ -134,6 +142,7 @@ end
get_internal(value::InfrastructureSystemsComponent) = value.internal

include("common.jl")
include("relative_units.jl")
include("random_seed.jl")
include("utils/timers.jl")
include("utils/assert_op.jl")
Expand Down Expand Up @@ -208,4 +217,5 @@ include("function_data/make_convex.jl")
include("deprecated.jl")
include("Optimization/Optimization.jl")
include("Simulation/Simulation.jl")

end # module
39 changes: 25 additions & 14 deletions src/cost_aliases.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
# methods being defined for all the `ValueCurve{FunctionData}` types, not just the ones we
# have here nicely packaged and presented to the user.

# Default `is_cost_alias` is defined in value_curve.jl so it's available to
# time_series_value_curve.jl show methods (included before this file).
"Whether there is a cost alias for the instance or type under consideration"
is_cost_alias(::Union{ValueCurve, Type{<:ValueCurve}}) = false

"""
LinearCurve(proportional_term::Float64)
Expand All @@ -29,6 +29,7 @@ curve = LinearCurve(50.0, 100.0)
const LinearCurve = InputOutputCurve{LinearFunctionData}

is_cost_alias(::Union{LinearCurve, Type{LinearCurve}}) = true
simple_type_name(::LinearCurve) = "LinearCurve"

InputOutputCurve{LinearFunctionData}(proportional_term::Real) =
InputOutputCurve(LinearFunctionData(proportional_term))
Expand All @@ -44,7 +45,7 @@ get_constant_term(vc::LinearCurve) = get_constant_term(get_function_data(vc))

Base.show(io::IO, vc::LinearCurve) =
if isnothing(get_input_at_zero(vc))
print(io, "$(typeof(vc))($(get_proportional_term(vc)), $(get_constant_term(vc)))")
print(io, "LinearCurve($(get_proportional_term(vc)), $(get_constant_term(vc)))")
else
Base.show_default(io, vc)
end
Expand All @@ -67,6 +68,7 @@ curve = QuadraticCurve(0.002, 25.0, 150.0)
const QuadraticCurve = InputOutputCurve{QuadraticFunctionData}

is_cost_alias(::Union{QuadraticCurve, Type{QuadraticCurve}}) = true
simple_type_name(::QuadraticCurve) = "QuadraticCurve"

InputOutputCurve{QuadraticFunctionData}(quadratic_term, proportional_term, constant_term) =
InputOutputCurve(
Expand All @@ -86,7 +88,7 @@ Base.show(io::IO, vc::QuadraticCurve) =
if isnothing(get_input_at_zero(vc))
print(
io,
"$(typeof(vc))($(get_quadratic_term(vc)), $(get_proportional_term(vc)), $(get_constant_term(vc)))",
"QuadraticCurve($(get_quadratic_term(vc)), $(get_proportional_term(vc)), $(get_constant_term(vc)))",
)
else
Base.show_default(io, vc)
Expand All @@ -112,6 +114,7 @@ curve = PiecewisePointCurve([(100.0, 400.0), (200.0, 900.0), (300.0, 1500.0)])
const PiecewisePointCurve = InputOutputCurve{PiecewiseLinearData}

is_cost_alias(::Union{PiecewisePointCurve, Type{PiecewisePointCurve}}) = true
simple_type_name(::PiecewisePointCurve) = "PiecewisePointCurve"

InputOutputCurve{PiecewiseLinearData}(points::Vector) =
InputOutputCurve(PiecewiseLinearData(points))
Expand All @@ -131,7 +134,7 @@ get_slopes(vc::PiecewisePointCurve) = get_slopes(get_function_data(vc))
# Here we manually circumvent the @NamedTuple{x::Float64, y::Float64} type annotation, but we keep things looking like named tuples
Base.show(io::IO, vc::PiecewisePointCurve) =
if isnothing(get_input_at_zero(vc))
print(io, "$(typeof(vc))([$(join(get_points(vc), ", "))])")
print(io, "PiecewisePointCurve([$(join(get_points(vc), ", "))])")
else
Base.show_default(io, vc)
end
Expand Down Expand Up @@ -159,6 +162,7 @@ curve = PiecewiseIncrementalCurve(500.0, [100.0, 150.0, 200.0], [30.0, 35.0])
const PiecewiseIncrementalCurve = IncrementalCurve{PiecewiseStepData}

is_cost_alias(::Union{PiecewiseIncrementalCurve, Type{PiecewiseIncrementalCurve}}) = true
simple_type_name(::PiecewiseIncrementalCurve) = "PiecewiseIncrementalCurve"

IncrementalCurve{PiecewiseStepData}(initial_input, x_coords::Vector, slopes::Vector) =
IncrementalCurve(PiecewiseStepData(x_coords, slopes), initial_input)
Expand All @@ -181,9 +185,9 @@ Base.show(io::IO, vc::PiecewiseIncrementalCurve) =
print(
io,
if isnothing(get_input_at_zero(vc))
"$(typeof(vc))($(get_initial_input(vc)), $(get_x_coords(vc)), $(get_slopes(vc)))"
"PiecewiseIncrementalCurve($(get_initial_input(vc)), $(get_x_coords(vc)), $(get_slopes(vc)))"
else
"$(typeof(vc))($(get_input_at_zero(vc)), $(get_initial_input(vc)), $(get_x_coords(vc)), $(get_slopes(vc)))"
"PiecewiseIncrementalCurve($(get_input_at_zero(vc)), $(get_initial_input(vc)), $(get_x_coords(vc)), $(get_slopes(vc)))"
end,
)

Expand All @@ -202,6 +206,7 @@ input). If your data gives incremental/marginal rates instead, use
const PiecewiseAverageCurve = AverageRateCurve{PiecewiseStepData}

is_cost_alias(::Union{PiecewiseAverageCurve, Type{PiecewiseAverageCurve}}) = true
simple_type_name(::PiecewiseAverageCurve) = "PiecewiseAverageCurve"

AverageRateCurve{PiecewiseStepData}(initial_input, x_coords::Vector, y_coords::Vector) =
AverageRateCurve(PiecewiseStepData(x_coords, y_coords), initial_input)
Expand All @@ -216,7 +221,7 @@ Base.show(io::IO, vc::PiecewiseAverageCurve) =
if isnothing(get_input_at_zero(vc))
print(
io,
"$(typeof(vc))($(get_initial_input(vc)), $(get_x_coords(vc)), $(get_average_rates(vc)))",
"PiecewiseAverageCurve($(get_initial_input(vc)), $(get_x_coords(vc)), $(get_average_rates(vc)))",
)
else
Base.show_default(io, vc)
Expand All @@ -237,14 +242,15 @@ const TimeSeriesLinearCurve =
TimeSeriesInputOutputCurve{TimeSeriesFunctionData{LinearFunctionData}}

is_cost_alias(::Union{TimeSeriesLinearCurve, Type{TimeSeriesLinearCurve}}) = true
simple_type_name(::TimeSeriesLinearCurve) = "TimeSeriesLinearCurve"

TimeSeriesInputOutputCurve{TimeSeriesFunctionData{LinearFunctionData}}(
key::TimeSeriesKey,
) = TimeSeriesInputOutputCurve(TimeSeriesFunctionData{LinearFunctionData}(key))

Base.show(io::IO, vc::TimeSeriesLinearCurve) =
if isnothing(get_input_at_zero(vc))
print(io, "$(typeof(vc))($(_ts_key_repr(get_time_series_key(vc))))")
print(io, "$(simple_type_name(vc))($(_ts_key_repr(get_time_series_key(vc))))")
else
Base.show_default(io, vc)
end
Expand All @@ -259,14 +265,15 @@ const TimeSeriesQuadraticCurve =
TimeSeriesInputOutputCurve{TimeSeriesFunctionData{QuadraticFunctionData}}

is_cost_alias(::Union{TimeSeriesQuadraticCurve, Type{TimeSeriesQuadraticCurve}}) = true
simple_type_name(::TimeSeriesQuadraticCurve) = "TimeSeriesQuadraticCurve"

TimeSeriesInputOutputCurve{TimeSeriesFunctionData{QuadraticFunctionData}}(
key::TimeSeriesKey,
) = TimeSeriesInputOutputCurve(TimeSeriesFunctionData{QuadraticFunctionData}(key))

Base.show(io::IO, vc::TimeSeriesQuadraticCurve) =
if isnothing(get_input_at_zero(vc))
print(io, "$(typeof(vc))($(_ts_key_repr(get_time_series_key(vc))))")
print(io, "$(simple_type_name(vc))($(_ts_key_repr(get_time_series_key(vc))))")
else
Base.show_default(io, vc)
end
Expand All @@ -283,14 +290,15 @@ const TimeSeriesPiecewisePointCurve =
is_cost_alias(
::Union{TimeSeriesPiecewisePointCurve, Type{TimeSeriesPiecewisePointCurve}},
) = true
simple_type_name(::TimeSeriesPiecewisePointCurve) = "TimeSeriesPiecewisePointCurve"

TimeSeriesInputOutputCurve{TimeSeriesFunctionData{PiecewiseLinearData}}(
key::TimeSeriesKey,
) = TimeSeriesInputOutputCurve(TimeSeriesFunctionData{PiecewiseLinearData}(key))

Base.show(io::IO, vc::TimeSeriesPiecewisePointCurve) =
if isnothing(get_input_at_zero(vc))
print(io, "$(typeof(vc))($(_ts_key_repr(get_time_series_key(vc))))")
print(io, "$(simple_type_name(vc))($(_ts_key_repr(get_time_series_key(vc))))")
else
Base.show_default(io, vc)
end
Expand All @@ -310,6 +318,8 @@ is_cost_alias(
Type{TimeSeriesPiecewiseIncrementalCurve},
},
) = true
simple_type_name(::TimeSeriesPiecewiseIncrementalCurve) =
"TimeSeriesPiecewiseIncrementalCurve"

TimeSeriesIncrementalCurve{TimeSeriesFunctionData{PiecewiseStepData}}(
key::TimeSeriesKey,
Expand All @@ -330,9 +340,9 @@ Base.show(io::IO, vc::TimeSeriesPiecewiseIncrementalCurve) =
print(
io,
if isnothing(get_input_at_zero(vc))
"$(typeof(vc))($(_ts_key_repr(get_time_series_key(vc))), $(_ts_key_repr(get_initial_input(vc))))"
"$(simple_type_name(vc))($(_ts_key_repr(get_time_series_key(vc))), $(_ts_key_repr(get_initial_input(vc))))"
else
"$(typeof(vc))($(_ts_key_repr(get_time_series_key(vc))), $(_ts_key_repr(get_initial_input(vc))), $(_ts_key_repr(get_input_at_zero(vc))))"
"$(simple_type_name(vc))($(_ts_key_repr(get_time_series_key(vc))), $(_ts_key_repr(get_initial_input(vc))), $(_ts_key_repr(get_input_at_zero(vc))))"
end,
)

Expand All @@ -351,6 +361,7 @@ is_cost_alias(
Type{TimeSeriesPiecewiseAverageCurve},
},
) = true
simple_type_name(::TimeSeriesPiecewiseAverageCurve) = "TimeSeriesPiecewiseAverageCurve"

TimeSeriesAverageRateCurve{TimeSeriesFunctionData{PiecewiseStepData}}(
key::TimeSeriesKey,
Expand All @@ -371,7 +382,7 @@ Base.show(io::IO, vc::TimeSeriesPiecewiseAverageCurve) =
if isnothing(get_input_at_zero(vc))
print(
io,
"$(typeof(vc))($(_ts_key_repr(get_time_series_key(vc))), $(_ts_key_repr(get_initial_input(vc))))",
"$(simple_type_name(vc))($(_ts_key_repr(get_time_series_key(vc))), $(_ts_key_repr(get_initial_input(vc))))",
)
else
Base.show_default(io, vc)
Expand Down
Loading
Loading