diff --git a/stable b/stable index f53b7bda11..3756ecfe07 120000 --- a/stable +++ b/stable @@ -1 +1 @@ -v0.28.2 \ No newline at end of file +v0.28.3 \ No newline at end of file diff --git a/v0.28 b/v0.28 index f53b7bda11..3756ecfe07 120000 --- a/v0.28 +++ b/v0.28 @@ -1 +1 @@ -v0.28.2 \ No newline at end of file +v0.28.3 \ No newline at end of file diff --git a/v0.28.3/api/PowerSimulations/index.html b/v0.28.3/api/PowerSimulations/index.html new file mode 100644 index 0000000000..41b6036558 --- /dev/null +++ b/v0.28.3/api/PowerSimulations/index.html @@ -0,0 +1,239 @@ + +API Reference · PowerSimulations.jl

API Reference

Table of Contents

  + 

Device Models

List of structures and methods for Device models

PowerSimulations.DeviceModelType
DeviceModel(
+    ::Type{D},
+    ::Type{B},
+    feedforwards::Vector{<:AbstractAffectFeedforward}
+    use_slacks::Bool,
+    duals::Vector{DataType},
+    services::Vector{ServiceModel}
+    attributes::Dict{String, Any}
+)

Establishes the model for a particular device specified by type. Uses the keyword argument feedforward to enable passing values between operation model at simulation time

Arguments

  • ::Type{D} where D<:PSY.Device: Power System Device Type
  • ::Type{B} where B<:AbstractDeviceFormulation: Abstract Device Formulation
  • feedforward::Array{<:AbstractAffectFeedforward} = Vector{AbstractAffectFeedforward}() : use to pass parameters between models
  • use_slacks::Bool = false : Add slacks to the device model. Implementation is model dependent and not all models feature slacks
  • duals::Vector{DataType} = Vector{DataType}(): use to pass constraint type to calculate the duals. The DataType needs to be a valid ConstraintType
  • time_series_names::Dict{Type{<:TimeSeriesParameter}, String} = get_default_time_series_names(D, B) : use to specify time series names associated to the device`
  • attributes::Dict{String, Any} = get_default_attributes(D, B) : use to specify attributes to the device

Example

thermal_gens = DeviceModel(ThermalStandard, ThermalBasicUnitCommitment)
source

Formulations

Refer to the Formulations Page for each Abstract Device Formulation.

Problem Templates

Refer to the Problem Templates Page for available ProblemTemplates.

  + 

Decision Models

PowerSimulations.DecisionModelType
DecisionModel{M}(
+    template::AbstractProblemTemplate,
+    sys::PSY.System,
+    jump_model::Union{Nothing, JuMP.Model}=nothing;
+    kwargs...) where {M<:DecisionProblem}

Build the optimization problem of type M with the specific system and template.

Arguments

  • ::Type{M} where M<:DecisionProblem: The abstract operation model type
  • template::AbstractProblemTemplate: The model reference made up of transmission, devices, branches, and services.
  • sys::PSY.System: the system created using Power Systems
  • jump_model::Union{Nothing, JuMP.Model}: Enables passing a custom JuMP model. Use with care
  • name = nothing: name of model, string or symbol; defaults to the type of template converted to a symbol.
  • optimizer::Union{Nothing,MOI.OptimizerWithAttributes} = nothing : The optimizer does not get serialized. Callers should pass whatever they passed to the original problem.
  • horizon::Dates.Period = UNSET_HORIZON: Manually specify the length of the forecast Horizon
  • resolution::Dates.Period = UNSET_RESOLUTION: Manually specify the model's resolution
  • warm_start::Bool = true: True will use the current operation point in the system to initialize variable values. False initializes all variables to zero. Default is true
  • system_to_file::Bool = true:: True to create a copy of the system used in the model.
  • initialize_model::Bool = true: Option to decide to initialize the model or not.
  • initialization_file::String = "": This allows to pass pre-existing initialization values to avoid the solution of an optimization problem to find feasible initial conditions.
  • deserialize_initial_conditions::Bool = false: Option to deserialize conditions
  • export_pwl_vars::Bool = false: True to export all the pwl intermediate variables. It can slow down significantly the build and solve time.
  • allow_fails::Bool = false: True to allow the simulation to continue even if the optimization step fails. Use with care.
  • optimizer_solve_log_print::Bool = false: Uses JuMP.unset_silent() to print the optimizer's log. By default all solvers are set to MOI.Silent()
  • detailed_optimizer_stats::Bool = false: True to save detailed optimizer stats log.
  • calculate_conflict::Bool = false: True to use solver to calculate conflicts for infeasible problems. Only specific solvers are able to calculate conflicts.
  • direct_mode_optimizer::Bool = false: True to use the solver in direct mode. Creates a JuMP.direct_model.
  • store_variable_names::Bool = false: to store variable names in optimization model. Decreases the build times.
  • rebuild_model::Bool = false: It will force the rebuild of the underlying JuMP model with each call to update the model. It increases solution times, use only if the model can't be updated in memory.
  • initial_time::Dates.DateTime = UNSET_INI_TIME: Initial Time for the model solve.
  • time_series_cache_size::Int = IS.TIME_SERIES_CACHE_SIZE_BYTES: Size in bytes to cache for each time array. Default is 1 MiB. Set to 0 to disable.

Example

template = ProblemTemplate(CopperPlatePowerModel, devices, branches, services)
+OpModel = DecisionModel(MockOperationProblem, template, system)
source
DecisionModel(
+    ::Type{M<:PowerSimulations.DecisionProblem},
+    template::PowerSimulations.AbstractProblemTemplate,
+    sys::System;
+    ...
+) -> DecisionModel
+DecisionModel(
+    ::Type{M<:PowerSimulations.DecisionProblem},
+    template::PowerSimulations.AbstractProblemTemplate,
+    sys::System,
+    jump_model::Union{Nothing, JuMP.Model};
+    kwargs...
+) -> DecisionModel
+

Build the optimization problem of type M with the specific system and template

Arguments

  • ::Type{M} where M<:DecisionProblem: The abstract operation model type
  • template::AbstractProblemTemplate: The model reference made up of transmission, devices, branches, and services.
  • sys::PSY.System: the system created using Power Systems
  • jump_model::Union{Nothing, JuMP.Model} = nothing: Enables passing a custom JuMP model. Use with care.

Example

template = ProblemTemplate(CopperPlatePowerModel, devices, branches, services)
+problem = DecisionModel(MyOpProblemType, template, system, optimizer)
source

Builds an empty decision model. This constructor is used for the implementation of custom decision models that do not require a template.

Arguments

  • ::Type{M} where M<:DecisionProblem: The abstract operation model type
  • sys::PSY.System: the system created using Power Systems
  • jump_model::Union{Nothing, JuMP.Model} = nothing: Enables passing a custom JuMP model. Use with care.

Example

problem = DecisionModel(system, optimizer)
source
DecisionModel(
+    directory::AbstractString,
+    optimizer::MathOptInterface.OptimizerWithAttributes;
+    jump_model,
+    system
+) -> Any
+

Construct an DecisionProblem from a serialized file.

Arguments

  • directory::AbstractString: Directory containing a serialized model
  • jump_model::Union{Nothing, JuMP.Model} = nothing: The JuMP model does not get serialized. Callers should pass whatever they passed to the original problem.
  • optimizer::Union{Nothing,MOI.OptimizerWithAttributes} = nothing: The optimizer does not get serialized. Callers should pass whatever they passed to the original problem.
  • system::Union{Nothing, PSY.System}: Optionally, the system used for the model. If nothing and systofile was set to true when the model was created, the system will be deserialized from a file.
source
PowerSimulations.DecisionModelMethod
DecisionModel(
+    ::Type{M<:PowerSimulations.DecisionProblem},
+    template::PowerSimulations.AbstractProblemTemplate,
+    sys::System;
+    ...
+) -> DecisionModel
+DecisionModel(
+    ::Type{M<:PowerSimulations.DecisionProblem},
+    template::PowerSimulations.AbstractProblemTemplate,
+    sys::System,
+    jump_model::Union{Nothing, JuMP.Model};
+    kwargs...
+) -> DecisionModel
+

Build the optimization problem of type M with the specific system and template

Arguments

  • ::Type{M} where M<:DecisionProblem: The abstract operation model type
  • template::AbstractProblemTemplate: The model reference made up of transmission, devices, branches, and services.
  • sys::PSY.System: the system created using Power Systems
  • jump_model::Union{Nothing, JuMP.Model} = nothing: Enables passing a custom JuMP model. Use with care.

Example

template = ProblemTemplate(CopperPlatePowerModel, devices, branches, services)
+problem = DecisionModel(MyOpProblemType, template, system, optimizer)
source
PowerSimulations.DecisionModelMethod
DecisionModel(
+    directory::AbstractString,
+    optimizer::MathOptInterface.OptimizerWithAttributes;
+    jump_model,
+    system
+) -> Any
+

Construct an DecisionProblem from a serialized file.

Arguments

  • directory::AbstractString: Directory containing a serialized model
  • jump_model::Union{Nothing, JuMP.Model} = nothing: The JuMP model does not get serialized. Callers should pass whatever they passed to the original problem.
  • optimizer::Union{Nothing,MOI.OptimizerWithAttributes} = nothing: The optimizer does not get serialized. Callers should pass whatever they passed to the original problem.
  • system::Union{Nothing, PSY.System}: Optionally, the system used for the model. If nothing and systofile was set to true when the model was created, the system will be deserialized from a file.
source
PowerSimulations.build!Method
build!(
+    model::DecisionModel;
+    output_dir,
+    recorders,
+    console_level,
+    file_level,
+    disable_timer_outputs
+)
+

Build the Decision Model based on the specified DecisionProblem.

Arguments

  • model::DecisionModel{<:DecisionProblem}: DecisionModel object
  • output_dir::String: Output directory for results
  • recorders::Vector{Symbol} = []: recorder names to register
  • console_level = Logging.Error:
  • file_level = Logging.Info:
  • disable_timer_outputs = false : Enable/Disable timing outputs
source
PowerSimulations.solve!Method
solve!(
+    model::DecisionModel;
+    export_problem_results,
+    console_level,
+    file_level,
+    disable_timer_outputs,
+    serialize,
+    kwargs...
+) -> InfrastructureSystems.Simulation.RunStatusModule.RunStatus
+

Default solve method for models that conform to the requirements of DecisionModel{<: DecisionProblem}.

This will call build! on the model if it is not already built. It will forward all keyword arguments to that function.

Arguments

  • model::OperationModel = model: operation model
  • export_problem_results::Bool = false: If true, export OptimizationProblemResults DataFrames to CSV files. Reduces solution times during simulation.
  • console_level = Logging.Error:
  • file_level = Logging.Info:
  • disable_timer_outputs = false : Enable/Disable timing outputs
  • serialize::Bool = true: If true, serialize the model to a file to allow re-execution later.

Examples

results = solve!(OpModel)
+results = solve!(OpModel, export_problem_results = true)
source
  + 

Emulation Models

PowerSimulations.EmulationModelType
EmulationModel{M}(
+    template::AbstractProblemTemplate,
+    sys::PSY.System,
+    jump_model::Union{Nothing, JuMP.Model}=nothing;
+    kwargs...) where {M<:EmulationProblem}

Build the optimization problem of type M with the specific system and template.

Arguments

  • ::Type{M} where M<:EmulationProblem: The abstract Emulation model type
  • template::AbstractProblemTemplate: The model reference made up of transmission, devices, branches, and services.
  • sys::PSY.System: the system created using Power Systems
  • jump_model::Union{Nothing, JuMP.Model}: Enables passing a custom JuMP model. Use with care
  • name = nothing: name of model, string or symbol; defaults to the type of template converted to a symbol.
  • optimizer::Union{Nothing,MOI.OptimizerWithAttributes} = nothing : The optimizer does not get serialized. Callers should pass whatever they passed to the original problem.
  • warm_start::Bool = true: True will use the current operation point in the system to initialize variable values. False initializes all variables to zero. Default is true
  • system_to_file::Bool = true:: True to create a copy of the system used in the model.
  • initialize_model::Bool = true: Option to decide to initialize the model or not.
  • initialization_file::String = "": This allows to pass pre-existing initialization values to avoid the solution of an optimization problem to find feasible initial conditions.
  • deserialize_initial_conditions::Bool = false: Option to deserialize conditions
  • export_pwl_vars::Bool = false: True to export all the pwl intermediate variables. It can slow down significantly the build and solve time.
  • allow_fails::Bool = false: True to allow the simulation to continue even if the optimization step fails. Use with care.
  • calculate_conflict::Bool = false: True to use solver to calculate conflicts for infeasible problems. Only specific solvers are able to calculate conflicts.
  • optimizer_solve_log_print::Bool = false: Uses JuMP.unset_silent() to print the optimizer's log. By default all solvers are set to MOI.Silent()
  • detailed_optimizer_stats::Bool = false: True to save detailed optimizer stats log.
  • direct_mode_optimizer::Bool = false: True to use the solver in direct mode. Creates a JuMP.direct_model.
  • store_variable_names::Bool = false: True to store variable names in optimization model.
  • rebuild_model::Bool = false: It will force the rebuild of the underlying JuMP model with each call to update the model. It increases solution times, use only if the model can't be updated in memory.
  • initial_time::Dates.DateTime = UNSET_INI_TIME: Initial Time for the model solve.
  • time_series_cache_size::Int = IS.TIME_SERIES_CACHE_SIZE_BYTES: Size in bytes to cache for each time array. Default is 1 MiB. Set to 0 to disable.

Example

template = ProblemTemplate(CopperPlatePowerModel, devices, branches, services)
+OpModel = EmulationModel(MockEmulationProblem, template, system)
source
PowerSimulations.EmulationModelMethod
EmulationModel(
+    ::Type{M<:PowerSimulations.EmulationProblem},
+    template::PowerSimulations.AbstractProblemTemplate,
+    sys::System;
+    ...
+) -> EmulationModel
+EmulationModel(
+    ::Type{M<:PowerSimulations.EmulationProblem},
+    template::PowerSimulations.AbstractProblemTemplate,
+    sys::System,
+    jump_model::Union{Nothing, JuMP.Model};
+    kwargs...
+) -> EmulationModel
+

Build the optimization problem of type M with the specific system and template

Arguments

  • ::Type{M} where M<:EmulationProblem: The abstract Emulation model type
  • template::AbstractProblemTemplate: The model reference made up of transmission, devices, branches, and services.
  • sys::PSY.System: the system created using Power Systems
  • jump_model::Union{Nothing, JuMP.Model}: Enables passing a custom JuMP model. Use with care

Example

template = ProblemTemplate(CopperPlatePowerModel, devices, branches, services)
+problem = EmulationModel(MyEmProblemType, template, system, optimizer)
source
PowerSimulations.EmulationModelMethod
EmulationModel(
+    directory::AbstractString,
+    optimizer::MathOptInterface.OptimizerWithAttributes;
+    jump_model,
+    system,
+    kwargs...
+) -> Any
+

Construct an EmulationProblem from a serialized file.

Arguments

  • directory::AbstractString: Directory containing a serialized model.
  • optimizer::MOI.OptimizerWithAttributes: The optimizer does not get serialized. Callers should pass whatever they passed to the original problem.
  • jump_model::Union{Nothing, JuMP.Model} = nothing: The JuMP model does not get serialized. Callers should pass whatever they passed to the original problem.
  • system::Union{Nothing, PSY.System}: Optionally, the system used for the model. If nothing and systofile was set to true when the model was created, the system will be deserialized from a file.
source
PowerSimulations.build!Method
build!(
+    model::EmulationModel;
+    executions,
+    output_dir,
+    recorders,
+    console_level,
+    file_level,
+    disable_timer_outputs
+)
+

Implementation of build for any EmulationProblem

source
PowerSimulations.run!Method
run!(
+    model::EmulationModel;
+    export_problem_results,
+    console_level,
+    file_level,
+    disable_timer_outputs,
+    serialize,
+    kwargs...
+) -> InfrastructureSystems.Simulation.RunStatusModule.RunStatus
+

Default run method for problems that conform to the requirements of EmulationModel{<: EmulationProblem}

This will call build! on the model if it is not already built. It will forward all keyword arguments to that function.

Arguments

  • model::EmulationModel = model: Emulation model
  • optimizer::MOI.OptimizerWithAttributes: The optimizer that is used to solve the model
  • executions::Int: Number of executions for the emulator run
  • export_problem_results::Bool: If true, export OptimizationProblemResults DataFrames to CSV files.
  • output_dir::String: Required if the model is not already built, otherwise ignored
  • enable_progress_bar::Bool: Enables/Disable progress bar printing
  • serialize::Bool: If true, serialize the model to a file to allow re-execution later.

Examples

status = run!(model; optimizer = GLPK.Optimizer, executions = 10)
+status = run!(model; output_dir = ./model_output, optimizer = GLPK.Optimizer, executions = 10)
source
  + 

Service Models

List of structures and methods for Service models

PowerSimulations.ServiceModelType

Establishes the model for a particular services specified by type. Uses the keyword argument use_service_name to assign the model to a service with the same name as the name in the template. Uses the keyword argument feedforward to enable passing values between operation model at simulation time

Arguments

-::Type{D}: Power System Service Type -::Type{B}: Abstract Service Formulation

Accepted Key Words

  • feedforward::Array{<:AbstractAffectFeedforward} : use to pass parameters between models
  • use_service_name::Bool : use the name as the name for the service

Example

reserves = ServiceModel(PSY.VariableReserve{PSY.ReserveUp}, RangeReserve)

source
  + 

Simulation Models

Refer to the Simulations Page to explanations on how to setup a Simulation, with Sequencing and Feedforwards.

PowerSimulations.SimulationModelsType
SimulationModels(
+    decision_models::Vector{<:DecisionModel},
+    emulation_models::Union{Nothing, EmulationModel}
+)

Stores the OperationProblem definitions to be used in the simulation. When creating the SimulationModels, the order in which the models are created determines the order on which the simulation is executed.

Arguments

  • decision_models::Vector{<:DecisionModel}: Vector of decision models.
  • emulation_models::Union{Nothing, EmulationModel}: Optional argument to include

an EmulationModel in the Simulation

Example

template_uc = template_unit_commitment()
+template_ed = template_economic_dispatch()
+my_decision_model_uc = DecisionModel(template_1, sys_uc, optimizer, name = "UC")
+my_decision_model_ed = DecisionModel(template_ed, sys_ed, optimizer, name = "ED")
+models = SimulationModels(
+    decision_models = [
+        my_decision_model_uc,
+        my_decision_model_ed
+    ]
+)
source
PowerSimulations.SimulationSequenceType
SimulationSequence(
+    models::SimulationModels,
+    feedforward::Dict{String, Vector{<:AbstractAffectFeedforward}}
+    ini_cond_chronology::InitialConditionChronology
+)

Construct the simulation sequence between decision and emulation models.

Arguments

  • models::SimulationModels: Vector of decisions and emulation models.
  • feedforward = Dict{String, Vector{<:AbstractAffectFeedforward}}(): Optional dictionary to specify how information

and variables are exchanged between decision and emulation models.

  • ini_cond_chronology::nitialConditionChronology = InterProblemChronology(): TODO

Example

template_uc = template_unit_commitment()
+template_ed = template_economic_dispatch()
+my_decision_model_uc = DecisionModel(template_1, sys_uc, optimizer, name = "UC")
+my_decision_model_ed = DecisionModel(template_ed, sys_ed, optimizer, name = "ED")
+models = SimulationModels(
+    decision_models = [
+        my_decision_model_uc,
+        my_decision_model_ed
+    ]
+)
+# The following sequence set the commitment variables (`OnVariable`) for `ThermalStandard` units from UC to ED.
+sequence = SimulationSequence(;
+    models = models,
+    feedforwards = Dict(
+        "ED" => [
+            SemiContinuousFeedforward(;
+                component_type = ThermalStandard,
+                source = OnVariable,
+                affected_values = [ActivePowerVariable],
+            ),
+        ],
+    ),
+)
source
PowerSimulations.SimulationType
Simulation(
+    sequence::SimulationSequence,
+    name::String,
+    steps::Int
+    models::SimulationModels,
+    simulation_folder::String,
+    initial_time::Union{Nothing, Dates.DateTime}
+)

Construct the Simulation structure to run the sequence of decision and emulation models specified.

Arguments

-sequence::SimulationSequence: Simulation sequence that specify how the decision and emulation models will be executed. -name::String: Name of the Simulation -steps::Int: Number of steps on which the sequence of models will be executed -models::SimulationModels: List of Decision and Emulation Models -simulation_folder::String: Folder on which results will be stored -initial_time::Union{Nothing, Dates.DateTime} = nothing: Initial time of which the simulation starts. If nothing it will default to the first timestamp of time series of the system.

Example

template_uc = template_unit_commitment()
+template_ed = template_economic_dispatch()
+my_decision_model_uc = DecisionModel(template_1, sys_uc, optimizer, name = "UC")
+my_decision_model_ed = DecisionModel(template_ed, sys_ed, optimizer, name = "ED")
+models = SimulationModels(
+    decision_models = [
+        my_decision_model_uc,
+        my_decision_model_ed
+    ]
+)
+# The following sequence set the commitment variables (`OnVariable`) for `ThermalStandard` units from UC to ED.
+sequence = SimulationSequence(;
+    models = models,
+    feedforwards = Dict(
+        "ED" => [
+            SemiContinuousFeedforward(;
+                component_type = ThermalStandard,
+                source = OnVariable,
+                affected_values = [ActivePowerVariable],
+            ),
+        ],
+    ),
+)
+
+sim = Simulation(
+    sequence = sequence,
+    name = "Sim",
+    steps = 5,
+    models = models,
+    simulation_folder = mktempdir(cleanup=true),
+)
source
PowerSimulations.SimulationMethod
Simulation(directory::AbstractString, model_info::Dict)
+

Constructs Simulation from a serialized directory. Callers should pass any kwargs here that they passed to the original Simulation.

Arguments

  • directory::AbstractString: the directory returned from the call to serialize
  • model_info::Dict: Two-level dictionary containing model parameters that cannot be serialized. The outer dict should be keyed by the problem name. The inner dict must contain 'optimizer' and may contain 'jump_model'. These should be the same values used for the original simulation.
source
PowerSimulations.build!Method
build!(
+    sim::Simulation;
+    recorders,
+    console_level,
+    file_level,
+    serialize,
+    partitions,
+    index
+) -> InfrastructureSystems.Simulation.SimulationBuildStatusModule.SimulationBuildStatus
+

Build the Simulation, problems and the related folder structure.

Arguments

  • sim::Simulation: simulation object
  • recorders::Vector{Symbol} = []: recorder names to register
  • serialize::Bool = true: serializes the simulation objects in the simulation
  • console_level = Logging.Error:
  • file_level = Logging.Info:
source
PowerSimulations.execute!Method
execute!(
+    sim::Simulation;
+    kwargs...
+) -> InfrastructureSystems.Simulation.RunStatusModule.RunStatus
+

Solves the simulation model for sequential Simulations.

Arguments

  • sim::Simulation=sim: simulation object created by Simulation()

The optional keyword argument exports controls exporting of results to CSV files as the simulation runs.

Example

sim = Simulation("Test", 7, problems, "/Users/folder")
+execute!(sim::Simulation; kwargs...)
source
  + 

Variables

For a list of variables for each device refer to its Formulations page.

Common Variables

Thermal Unit Variables

Storage Unit Variables

Branches and Network Variables

Services Variables

PowerSimulations.ReserveRequirementSlackType

Struct to dispatch the creation of Reserve requirement slack variables. Used when there is not reserves in the system to satisfy the requirement.

Docs abbreviation: $r^\text{sl}$

source

Feedforward Variables

  + 

Constraints

Common Constraints

Network Constraints

Power Variable Limit Constraints

PowerSimulations.ActivePowerVariableLimitsConstraintType

Struct to create the constraint to limit active power expressions. For more information check Device Formulations.

The specified constraint depends on the UpperBound and LowerBound expressions, but in its most basic formulation is of the form:

\[P^\text{min} \le p_t \le P^\text{max}, \quad \forall t \in \{1,\dots,T\}\]

source

Services Constraints

PowerSimulations.RequirementConstraintType

Struct to create the constraint for satisfying active power reserve requirements. For more information check Service Formulations.

The constraint is as follows:

\[\sum_{d\in\mathcal{D}_s} r_{d,t} + r_t^\text{sl} \ge \text{Req},\quad \forall t\in \{1,\dots, T\} \quad \text{(for a ConstantReserve)} \\ +\sum_{d\in\mathcal{D}_s} r_{d,t} + r_t^\text{sl} \ge \text{RequirementTimeSeriesParameter}_{t},\quad \forall t\in \{1,\dots, T\} \quad \text{(for a VariableReserve)}\]

source
PowerSimulations.ParticipationFractionConstraintType

Struct to create the constraint to participation assignments limits in the active power reserves. For more information check Service Formulations.

The constraint is as follows:

\[r_{d,t} \le \text{Req} \cdot \text{PF} ,\quad \forall d\in \mathcal{D}_s, \forall t\in \{1,\dots, T\} \quad \text{(for a ConstantReserve)} \\ +r_{d,t} \le \text{RequirementTimeSeriesParameter}_{t} \cdot \text{PF}\quad \forall d\in \mathcal{D}_s, \forall t\in \{1,\dots, T\}, \quad \text{(for a VariableReserve)}\]

source
PowerSimulations.ReservePowerConstraintType

Struct to create the constraint for ensuring that NonSpinning Reserve can be delivered from turn-off thermal units.

For more information check Service Formulations for NonSpinningReserve.

The constraint is as follows:

\[r_{d,t} \le (1 - u_{d,t}^\text{th}) \cdot R^\text{limit}_d, \quad \forall d \in \mathcal{D}_s, \forall t \in \{1,\dots, T\}\]

source

Thermal Unit Constraints

PowerSimulations.ActiveRangeICConstraintType

Struct to create the constraint for starting up ThermalMultiStart units. For more information check ThermalGen Formulations for ThermalMultiStartUnitCommitment.

The specified constraint is formulated as:

\[\max\{P^\text{th,max} - P^\text{th,shdown}, 0\} \cdot w_1^\text{th} \le u^\text{th,init} (P^\text{th,max} - P^\text{th,min}) - P^\text{th,init}\]

source
PowerSimulations.CommitmentConstraintType

Struct to create the commitment constraint between the on, start, and stop variables. For more information check ThermalGen Formulations.

The specified constraints are formulated as:

\[u_1^\text{th} = u^\text{th,init} + v_1^\text{th} - w_1^\text{th} \\ +u_t^\text{th} = u_{t-1}^\text{th} + v_t^\text{th} - w_t^\text{th}, \quad \forall t \in \{2,\dots,T\} \\ +v_t^\text{th} + w_t^\text{th} \le 1, \quad \forall t \in \{1,\dots,T\}\]

source
PowerSimulations.RampConstraintType

Struct to create the RampConstraint associated with a specified thermal device or reserve service.

For thermal units, see more information in Thermal Formulations. The constraint is as follows:

\[-R^\text{th,dn} \le p_t^\text{th} - p_{t-1}^\text{th} \le R^\text{th,up}, \quad \forall t\in \{1, \dots, T\}\]

For Ramp Reserve, see more information in Service Formulations. The constraint is as follows:

\[r_{d,t} \le R^\text{th,up} \cdot \text{TF}\quad \forall d\in \mathcal{D}_s, \forall t\in \{1,\dots, T\}, \quad \text{(for ReserveUp)} \\ +r_{d,t} \le R^\text{th,dn} \cdot \text{TF}\quad \forall d\in \mathcal{D}_s, \forall t\in \{1,\dots, T\}, \quad \text{(for ReserveDown)}\]

source

Renewable Unit Constraints

PowerSimulations.EqualityConstraintType

Struct to create the constraint that sets the reactive power to the power factor in the RenewableConstantPowerFactor formulation for renewable units.

For more information check RenewableGen Formulations.

The specified constraint is formulated as:

\[q_t^\text{re} = \text{pf} \cdot p_t^\text{re}, \quad \forall t \in \{1,\dots, T\}\]

source

Branches Constraints

PowerSimulations.FlowLimitConstraintType

Struct to create the constraint that set the flow limits through a PhaseShiftingTransformer.

For more information check Branch Formulations.

The specified constraint is formulated as:

\[-R^\text{max} \le f_t \le R^\text{max}, \quad \forall t \in \{1,\dots,T\}\]

source
PowerSimulations.FlowRateConstraintType

Struct to create the constraint that set the flow limits through an HVDC two-terminal branch.

For more information check Branch Formulations.

The specified constraint is formulated as:

\[R^\text{min} \le f_t \le R^\text{max}, \quad \forall t \in \{1,\dots,T\}\]

source
PowerSimulations.FlowRateConstraintFromToType

Struct to create the constraint that set the flow from-to limits through an HVDC two-terminal branch.

For more information check Branch Formulations.

The specified constraint is formulated as:

\[R^\text{from,min} \le f_t^\text{from-to} \le R^\text{from,max}, \forall t \in \{1,\dots, T\}\]

source
PowerSimulations.FlowRateConstraintToFromType

Struct to create the constraint that set the flow to-from limits through an HVDC two-terminal branch.

For more information check Branch Formulations.

The specified constraint is formulated as:

\[R^\text{to,min} \le f_t^\text{to-from} \le R^\text{to,max},\quad \forall t \in \{1,\dots, T\}\]

source
PowerSimulations.HVDCLossesAbsoluteValueType

Struct to create the constraints that set the losses through a lossy HVDC two-terminal line.

For more information check Branch Formulations.

The specified constraints are formulated as:

\[\begin{align*} +& f_t^\text{to-from} - f_t^\text{from-to} \le \ell_t,\quad \forall t \in \{1,\dots, T\} \\ +& f_t^\text{from-to} - f_t^\text{to-from} \le \ell_t,\quad \forall t \in \{1,\dots, T\} +\end{align*}\]

source
PowerSimulations.HVDCPowerBalanceType

Struct to create the constraints that set the power balance across a lossy HVDC two-terminal line.

For more information check Branch Formulations.

The specified constraints are formulated as:

\[\begin{align*} +& f_t^\text{to-from} - f_t^\text{from-to} \le L_1 \cdot f_t^\text{to-from} - L_0,\quad \forall t \in \{1,\dots, T\} \\ +& f_t^\text{from-to} - f_t^\text{to-from} \ge L_1 \cdot f_t^\text{from-to} + L_0,\quad \forall t \in \{1,\dots, T\} \\ +& f_t^\text{from-to} - f_t^\text{to-from} \ge - M^\text{big} (1 - u^\text{dir}_t),\quad \forall t \in \{1,\dots, T\} \\ +& f_t^\text{to-from} - f_t^\text{from-to} \ge - M^\text{big} u^\text{dir}_t,\quad \forall t \in \{1,\dots, T\} \\ +\end{align*}\]

source
PowerSimulations.NetworkFlowConstraintType

Struct to create the constraint the AC branch flows depending on the network model. For more information check Branch Formulations.

The specified constraint depends on the network model chosen. The most common application is the StaticBranch in a PTDF Network Model:

\[f_t = \sum_{i=1}^N \text{PTDF}_{i,b} \cdot \text{Bal}_{i,t}, \quad \forall t \in \{1,\dots, T\}\]

source
PowerSimulations.RateLimitConstraintType

Struct to create the constraint that set the AC flow limits through branches.

For more information check Branch Formulations.

The specified constraint is formulated as:

\[\begin{align*} +& f_t - f_t^\text{sl,up} \le R^\text{max},\quad \forall t \in \{1,\dots, T\} \\ +& f_t + f_t^\text{sl,lo} \ge -R^\text{max},\quad \forall t \in \{1,\dots, T\} +\end{align*}\]

source
PowerSimulations.PhaseAngleControlLimitType

Struct to create the constraint that set the angle limits through a PhaseShiftingTransformer.

For more information check Branch Formulations.

The specified constraint is formulated as:

\[\Theta^\text{min} \le \theta^\text{shift}_t \le \Theta^\text{max}, \quad \forall t \in \{1,\dots,T\}\]

source

Feedforward Constraints

PowerSimulations.FeedforwardSemiContinuousConstraintType

Struct to create the constraint for semicontinuous feedforward limits.

For more information check Feedforward Formulations.

The specified constraint is formulated as:

\[\begin{align*} +& \text{ActivePowerRangeExpressionUB}_t := p_t^\text{th} - \text{on}_t^\text{th}P^\text{th,max} \le 0, \quad \forall t\in \{1, \dots, T\} \\ +& \text{ActivePowerRangeExpressionLB}_t := p_t^\text{th} - \text{on}_t^\text{th}P^\text{th,min} \ge 0, \quad \forall t\in \{1, \dots, T\} +\end{align*}\]

source
  + 

Parameters

Time Series Parameters

Variable Value Parameters

Objective Function Parameters

diff --git a/v0.28.3/assets/documenter.js b/v0.28.3/assets/documenter.js new file mode 100644 index 0000000000..6adfbbbf4b --- /dev/null +++ b/v0.28.3/assets/documenter.js @@ -0,0 +1,331 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'highlight-julia': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia.min', + 'headroom': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/headroom.min', + 'jqueryui': 'https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min', + 'katex-auto-render': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.24/contrib/auto-render.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + 'headroom-jquery': 'https://cdnjs.cloudflare.com/ajax/libs/headroom/0.12.0/jQuery.headroom.min', + 'katex': 'https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.24/katex.min', + 'highlight': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/highlight.min', + 'highlight-julia-repl': 'https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/languages/julia-repl.min', + }, + shim: { + "highlight-julia": { + "deps": [ + "highlight" + ] + }, + "katex-auto-render": { + "deps": [ + "katex" + ] + }, + "headroom-jquery": { + "deps": [ + "jquery", + "headroom" + ] + }, + "highlight-julia-repl": { + "deps": [ + "highlight" + ] + } +} +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'katex', 'katex-auto-render'], function($, katex, renderMathInElement) { +$(document).ready(function() { + renderMathInElement( + document.body, + { + "delimiters": [ + { + "left": "$", + "right": "$", + "display": false + }, + { + "left": "$$", + "right": "$$", + "display": true + }, + { + "left": "\\[", + "right": "\\]", + "display": true + } + ] +} + + ); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'highlight', 'highlight-julia', 'highlight-julia-repl'], function($) { +$(document).ready(function() { + hljs.highlightAll(); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require([], function() { +function addCopyButtonCallbacks() { + for (const el of document.getElementsByTagName("pre")) { + const button = document.createElement("button"); + button.classList.add("copy-button", "fas", "fa-copy"); + el.appendChild(button); + + const success = function () { + button.classList.add("success", "fa-check"); + button.classList.remove("fa-copy"); + }; + + const failure = function () { + button.classList.add("error", "fa-times"); + button.classList.remove("fa-copy"); + }; + + button.addEventListener("click", function () { + copyToClipboard(el.innerText).then(success, failure); + + setTimeout(function () { + button.classList.add("fa-copy"); + button.classList.remove("success", "fa-check", "fa-times"); + }, 5000); + }); + } +} + +function copyToClipboard(text) { + // clipboard API is only available in secure contexts + if (window.navigator && window.navigator.clipboard) { + return window.navigator.clipboard.writeText(text); + } else { + return new Promise(function (resolve, reject) { + try { + const el = document.createElement("textarea"); + el.textContent = text; + el.style.position = "fixed"; + el.style.opacity = 0; + document.body.appendChild(el); + el.select(); + document.execCommand("copy"); + + resolve(); + } catch (err) { + reject(err); + } finally { + document.body.removeChild(el); + } + }); + } +} + +if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", addCopyButtonCallbacks); +} else { + addCopyButtonCallbacks(); +} + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'headroom', 'headroom-jquery'], function($, Headroom) { + +// Manages the top navigation bar (hides it when the user starts scrolling down on the +// mobile). +window.Headroom = Headroom; // work around buggy module loading? +$(document).ready(function() { + $('#documenter .docs-navbar').headroom({ + "tolerance": {"up": 10, "down": 10}, + }); +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Modal settings dialog +$(document).ready(function() { + var settings = $('#documenter-settings'); + $('#documenter-settings-button').click(function(){ + settings.toggleClass('is-active'); + }); + // Close the dialog if X is clicked + $('#documenter-settings button.delete').click(function(){ + settings.removeClass('is-active'); + }); + // Close dialog if ESC is pressed + $(document).keyup(function(e) { + if (e.keyCode == 27) settings.removeClass('is-active'); + }); +}); + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// Manages the showing and hiding of the sidebar. +$(document).ready(function() { + var sidebar = $("#documenter > .docs-sidebar"); + var sidebar_button = $("#documenter-sidebar-button") + sidebar_button.click(function(ev) { + ev.preventDefault(); + sidebar.toggleClass('visible'); + if (sidebar.hasClass('visible')) { + // Makes sure that the current menu item is visible in the sidebar. + $("#documenter .docs-menu a.is-active").focus(); + } + }); + $("#documenter > .docs-main").bind('click', function(ev) { + if ($(ev.target).is(sidebar_button)) { + return; + } + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + }); +}) + +// Resizes the package name / sitename in the sidebar if it is too wide. +// Inspired by: https://github.com/davatron5000/FitText.js +$(document).ready(function() { + e = $("#documenter .docs-autofit"); + function resize() { + var L = parseInt(e.css('max-width'), 10); + var L0 = e.width(); + if(L0 > L) { + var h0 = parseInt(e.css('font-size'), 10); + e.css('font-size', L * h0 / L0); + // TODO: make sure it survives resizes? + } + } + // call once and then register events + resize(); + $(window).resize(resize); + $(window).on('orientationchange', resize); +}); + +// Scroll the navigation bar to the currently selected menu item +$(document).ready(function() { + var sidebar = $("#documenter .docs-menu").get(0); + var active = $("#documenter .docs-menu .is-active").get(0); + if(typeof active !== 'undefined') { + sidebar.scrollTop = active.offsetTop - sidebar.offsetTop - 15; + } +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +function set_theme(theme) { + var active = null; + var disabled = []; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + var themename = ss.ownerNode.getAttribute("data-theme-name"); + if(themename === null) continue; // ignore non-theme stylesheets + // Find the active theme + if(themename === theme) active = ss; + else disabled.push(ss); + } + if(active !== null) { + active.disabled = false; + if(active.ownerNode.getAttribute("data-theme-primary") === null) { + document.getElementsByTagName('html')[0].className = "theme--" + theme; + } else { + document.getElementsByTagName('html')[0].className = ""; + } + disabled.forEach(function(ss){ + ss.disabled = true; + }); + } + + // Store the theme in localStorage + if(typeof(window.localStorage) !== "undefined") { + window.localStorage.setItem("documenter-theme", theme); + } else { + console.error("Browser does not support window.localStorage"); + } +} + +// Theme picker setup +$(document).ready(function() { + // onchange callback + $('#documenter-themepicker').change(function themepick_callback(ev){ + var themename = $('#documenter-themepicker option:selected').attr('value'); + set_theme(themename); + }); + + // Make sure that the themepicker displays the correct theme when the theme is retrieved + // from localStorage + if(typeof(window.localStorage) !== "undefined") { + var theme = window.localStorage.getItem("documenter-theme"); + if(theme !== null) { + $('#documenter-themepicker option').each(function(i,e) { + e.selected = (e.value === theme); + }) + } else { + $('#documenter-themepicker option').each(function(i,e) { + e.selected = $("html").hasClass(`theme--${e.value}`); + }) + } + } +}) + +}) +//////////////////////////////////////////////////////////////////////////////// +require(['jquery'], function($) { + +// update the version selector with info from the siteinfo.js and ../versions.js files +$(document).ready(function() { + // If the version selector is disabled with DOCUMENTER_VERSION_SELECTOR_DISABLED in the + // siteinfo.js file, we just return immediately and not display the version selector. + if (typeof DOCUMENTER_VERSION_SELECTOR_DISABLED === 'boolean' && DOCUMENTER_VERSION_SELECTOR_DISABLED) { + return; + } + + var version_selector = $("#documenter .docs-version-selector"); + var version_selector_select = $("#documenter .docs-version-selector select"); + + version_selector_select.change(function(x) { + target_href = version_selector_select.children("option:selected").get(0).value; + window.location.href = target_href; + }); + + // add the current version to the selector based on siteinfo.js, but only if the selector is empty + if (typeof DOCUMENTER_CURRENT_VERSION !== 'undefined' && $('#version-selector > option').length == 0) { + var option = $(""); + version_selector_select.append(option); + } + + if (typeof DOC_VERSIONS !== 'undefined') { + var existing_versions = version_selector_select.children("option"); + var existing_versions_texts = existing_versions.map(function(i,x){return x.text}); + DOC_VERSIONS.forEach(function(each) { + var version_url = documenterBaseURL + "/../" + each; + var existing_id = $.inArray(each, existing_versions_texts); + // if not already in the version selector, add it as a new option, + // otherwise update the old option with the URL and enable it + if (existing_id == -1) { + var option = $(""); + version_selector_select.append(option); + } else { + var option = existing_versions[existing_id]; + option.value = version_url; + option.disabled = false; + } + }); + } + + // only show the version selector if the selector has been populated + if (version_selector_select.children("option").length > 0) { + version_selector.toggleClass("visible"); + } +}) + +}) diff --git a/v0.28.3/assets/logo.png b/v0.28.3/assets/logo.png new file mode 100644 index 0000000000..c0c5d7d594 Binary files /dev/null and b/v0.28.3/assets/logo.png differ diff --git a/v0.28.3/assets/search.js b/v0.28.3/assets/search.js new file mode 100644 index 0000000000..c133f74101 --- /dev/null +++ b/v0.28.3/assets/search.js @@ -0,0 +1,267 @@ +// Generated by Documenter.jl +requirejs.config({ + paths: { + 'lunr': 'https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.9/lunr.min', + 'lodash': 'https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min', + 'jquery': 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min', + } +}); +//////////////////////////////////////////////////////////////////////////////// +require(['jquery', 'lunr', 'lodash'], function($, lunr, _) { + +$(document).ready(function() { + // parseUri 1.2.2 + // (c) Steven Levithan + // MIT License + function parseUri (str) { + var o = parseUri.options, + m = o.parser[o.strictMode ? "strict" : "loose"].exec(str), + uri = {}, + i = 14; + + while (i--) uri[o.key[i]] = m[i] || ""; + + uri[o.q.name] = {}; + uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) { + if ($1) uri[o.q.name][$1] = $2; + }); + + return uri; + }; + parseUri.options = { + strictMode: false, + key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], + q: { + name: "queryKey", + parser: /(?:^|&)([^&=]*)=?([^&]*)/g + }, + parser: { + strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/, + loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/ + } + }; + + $("#search-form").submit(function(e) { + e.preventDefault() + }) + + // list below is the lunr 2.1.3 list minus the intersect with names(Base) + // (all, any, get, in, is, only, which) and (do, else, for, let, where, while, with) + // ideally we'd just filter the original list but it's not available as a variable + lunr.stopWordFilter = lunr.generateStopWordFilter([ + 'a', + 'able', + 'about', + 'across', + 'after', + 'almost', + 'also', + 'am', + 'among', + 'an', + 'and', + 'are', + 'as', + 'at', + 'be', + 'because', + 'been', + 'but', + 'by', + 'can', + 'cannot', + 'could', + 'dear', + 'did', + 'does', + 'either', + 'ever', + 'every', + 'from', + 'got', + 'had', + 'has', + 'have', + 'he', + 'her', + 'hers', + 'him', + 'his', + 'how', + 'however', + 'i', + 'if', + 'into', + 'it', + 'its', + 'just', + 'least', + 'like', + 'likely', + 'may', + 'me', + 'might', + 'most', + 'must', + 'my', + 'neither', + 'no', + 'nor', + 'not', + 'of', + 'off', + 'often', + 'on', + 'or', + 'other', + 'our', + 'own', + 'rather', + 'said', + 'say', + 'says', + 'she', + 'should', + 'since', + 'so', + 'some', + 'than', + 'that', + 'the', + 'their', + 'them', + 'then', + 'there', + 'these', + 'they', + 'this', + 'tis', + 'to', + 'too', + 'twas', + 'us', + 'wants', + 'was', + 'we', + 'were', + 'what', + 'when', + 'who', + 'whom', + 'why', + 'will', + 'would', + 'yet', + 'you', + 'your' + ]) + + // add . as a separator, because otherwise "title": "Documenter.Anchors.add!" + // would not find anything if searching for "add!", only for the entire qualification + lunr.tokenizer.separator = /[\s\-\.]+/ + + // custom trimmer that doesn't strip @ and !, which are used in julia macro and function names + lunr.trimmer = function (token) { + return token.update(function (s) { + return s.replace(/^[^a-zA-Z0-9@!]+/, '').replace(/[^a-zA-Z0-9@!]+$/, '') + }) + } + + lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'juliaStopWordFilter') + lunr.Pipeline.registerFunction(lunr.trimmer, 'juliaTrimmer') + + var index = lunr(function () { + this.ref('location') + this.field('title',{boost: 100}) + this.field('text') + documenterSearchIndex['docs'].forEach(function(e) { + this.add(e) + }, this) + }) + var store = {} + + documenterSearchIndex['docs'].forEach(function(e) { + store[e.location] = {title: e.title, category: e.category, page: e.page} + }) + + $(function(){ + searchresults = $('#documenter-search-results'); + searchinfo = $('#documenter-search-info'); + searchbox = $('#documenter-search-query'); + searchform = $('.docs-search'); + sidebar = $('.docs-sidebar'); + function update_search(querystring) { + tokens = lunr.tokenizer(querystring) + results = index.query(function (q) { + tokens.forEach(function (t) { + q.term(t.toString(), { + fields: ["title"], + boost: 100, + usePipeline: true, + editDistance: 0, + wildcard: lunr.Query.wildcard.NONE + }) + q.term(t.toString(), { + fields: ["title"], + boost: 10, + usePipeline: true, + editDistance: 2, + wildcard: lunr.Query.wildcard.NONE + }) + q.term(t.toString(), { + fields: ["text"], + boost: 1, + usePipeline: true, + editDistance: 0, + wildcard: lunr.Query.wildcard.NONE + }) + }) + }) + searchinfo.text("Number of results: " + results.length) + searchresults.empty() + results.forEach(function(result) { + data = store[result.ref] + link = $(''+data.title+'') + link.attr('href', documenterBaseURL+'/'+result.ref) + if (data.category != "page"){ + cat = $('('+data.category+', '+data.page+')') + } else { + cat = $('('+data.category+')') + } + li = $('
  • ').append(link).append(" ").append(cat) + searchresults.append(li) + }) + } + + function update_search_box() { + querystring = searchbox.val() + update_search(querystring) + } + + searchbox.keyup(_.debounce(update_search_box, 250)) + searchbox.change(update_search_box) + + // Disable enter-key form submission for the searchbox on the search page + // and just re-run search rather than refresh the whole page. + searchform.keypress( + function(event){ + if (event.which == '13') { + if (sidebar.hasClass('visible')) { + sidebar.removeClass('visible'); + } + update_search_box(); + event.preventDefault(); + } + } + ); + + search_query_uri = parseUri(window.location).queryKey["q"] + if(search_query_uri !== undefined) { + search_query = decodeURIComponent(search_query_uri.replace(/\+/g, '%20')) + searchbox.val(search_query) + } + update_search_box(); + }) +}) + +}) diff --git a/v0.28.3/assets/themes/documenter-dark.css b/v0.28.3/assets/themes/documenter-dark.css new file mode 100644 index 0000000000..c94a294dcf --- /dev/null +++ b/v0.28.3/assets/themes/documenter-dark.css @@ -0,0 +1,7 @@ +@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}html.theme--documenter-dark .tabs,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .breadcrumb,html.theme--documenter-dark .file,html.theme--documenter-dark .button,.is-unselectable,html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after,html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}html.theme--documenter-dark .admonition:not(:last-child),html.theme--documenter-dark .tabs:not(:last-child),html.theme--documenter-dark .message:not(:last-child),html.theme--documenter-dark .list:not(:last-child),html.theme--documenter-dark .level:not(:last-child),html.theme--documenter-dark .breadcrumb:not(:last-child),html.theme--documenter-dark .highlight:not(:last-child),html.theme--documenter-dark .block:not(:last-child),html.theme--documenter-dark .title:not(:last-child),html.theme--documenter-dark .subtitle:not(:last-child),html.theme--documenter-dark .table-container:not(:last-child),html.theme--documenter-dark .table:not(:last-child),html.theme--documenter-dark .progress:not(:last-child),html.theme--documenter-dark .notification:not(:last-child),html.theme--documenter-dark .content:not(:last-child),html.theme--documenter-dark .box:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .modal-close,html.theme--documenter-dark .delete{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before,html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .modal-close::before,html.theme--documenter-dark .delete::before{height:2px;width:50%}html.theme--documenter-dark .modal-close::after,html.theme--documenter-dark .delete::after{height:50%;width:2px}html.theme--documenter-dark .modal-close:hover,html.theme--documenter-dark .delete:hover,html.theme--documenter-dark .modal-close:focus,html.theme--documenter-dark .delete:focus{background-color:rgba(10,10,10,0.3)}html.theme--documenter-dark .modal-close:active,html.theme--documenter-dark .delete:active{background-color:rgba(10,10,10,0.4)}html.theme--documenter-dark .is-small.modal-close,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.modal-close,html.theme--documenter-dark .is-small.delete,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}html.theme--documenter-dark .is-medium.modal-close,html.theme--documenter-dark .is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}html.theme--documenter-dark .is-large.modal-close,html.theme--documenter-dark .is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}html.theme--documenter-dark .control.is-loading::after,html.theme--documenter-dark .select.is-loading::after,html.theme--documenter-dark .loader,html.theme--documenter-dark .button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdee0;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}html.theme--documenter-dark .hero-video,html.theme--documenter-dark .modal-background,html.theme--documenter-dark .modal,html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:.4em;box-shadow:none;display:inline-flex;font-size:15px;height:2.25em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.375em - 1px);padding-left:calc(0.625em - 1px);padding-right:calc(0.625em - 1px);padding-top:calc(0.375em - 1px);position:relative;vertical-align:top}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus,html.theme--documenter-dark .pagination-ellipsis:focus,html.theme--documenter-dark .file-cta:focus,html.theme--documenter-dark .file-name:focus,html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .button:focus,html.theme--documenter-dark .is-focused.pagination-previous,html.theme--documenter-dark .is-focused.pagination-next,html.theme--documenter-dark .is-focused.pagination-link,html.theme--documenter-dark .is-focused.pagination-ellipsis,html.theme--documenter-dark .is-focused.file-cta,html.theme--documenter-dark .is-focused.file-name,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-focused.button,html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active,html.theme--documenter-dark .pagination-ellipsis:active,html.theme--documenter-dark .file-cta:active,html.theme--documenter-dark .file-name:active,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .button:active,html.theme--documenter-dark .is-active.pagination-previous,html.theme--documenter-dark .is-active.pagination-next,html.theme--documenter-dark .is-active.pagination-link,html.theme--documenter-dark .is-active.pagination-ellipsis,html.theme--documenter-dark .is-active.file-cta,html.theme--documenter-dark .is-active.file-name,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .is-active.button{outline:none}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled],html.theme--documenter-dark .pagination-ellipsis[disabled],html.theme--documenter-dark .file-cta[disabled],html.theme--documenter-dark .file-name[disabled],html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark fieldset[disabled] .pagination-previous,fieldset[disabled] html.theme--documenter-dark .pagination-next,html.theme--documenter-dark fieldset[disabled] .pagination-next,fieldset[disabled] html.theme--documenter-dark .pagination-link,html.theme--documenter-dark fieldset[disabled] .pagination-link,fieldset[disabled] html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark fieldset[disabled] .pagination-ellipsis,fieldset[disabled] html.theme--documenter-dark .file-cta,html.theme--documenter-dark fieldset[disabled] .file-cta,fieldset[disabled] html.theme--documenter-dark .file-name,html.theme--documenter-dark fieldset[disabled] .file-name,fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark fieldset[disabled] .select select,html.theme--documenter-dark .select fieldset[disabled] select,html.theme--documenter-dark fieldset[disabled] .textarea,html.theme--documenter-dark fieldset[disabled] .input,html.theme--documenter-dark fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] html.theme--documenter-dark .button,html.theme--documenter-dark fieldset[disabled] .button{cursor:not-allowed}/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,embed,iframe,object,video{height:auto;max-width:100%}audio{max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:left}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-clipped{overflow:hidden !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:15px !important}.is-size-7,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{font-size:.85em !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:15px !important}.is-size-7-mobile{font-size:.85em !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:15px !important}.is-size-7-tablet{font-size:.85em !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:15px !important}.is-size-7-touch{font-size:.85em !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:15px !important}.is-size-7-desktop{font-size:.85em !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:15px !important}.is-size-7-widescreen{font-size:.85em !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:15px !important}.is-size-7-fullhd{font-size:.85em !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#ecf0f1 !important}a.has-text-light:hover,a.has-text-light:focus{color:#cfd9db !important}.has-background-light{background-color:#ecf0f1 !important}.has-text-dark{color:#282f2f !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#111414 !important}.has-background-dark{background-color:#282f2f !important}.has-text-primary{color:#375a7f !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#28415b !important}.has-background-primary{background-color:#375a7f !important}.has-text-link{color:#1abc9c !important}a.has-text-link:hover,a.has-text-link:focus{color:#148f77 !important}.has-background-link{background-color:#1abc9c !important}.has-text-info{color:#024c7d !important}a.has-text-info:hover,a.has-text-info:focus{color:#012d4b !important}.has-background-info{background-color:#024c7d !important}.has-text-success{color:#008438 !important}a.has-text-success:hover,a.has-text-success:focus{color:#005122 !important}.has-background-success{background-color:#008438 !important}.has-text-warning{color:#ad8100 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#7a5b00 !important}.has-background-warning{background-color:#ad8100 !important}.has-text-danger{color:#9e1b0d !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#6f1309 !important}.has-background-danger{background-color:#9e1b0d !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#282f2f !important}.has-background-grey-darker{background-color:#282f2f !important}.has-text-grey-dark{color:#343c3d !important}.has-background-grey-dark{background-color:#343c3d !important}.has-text-grey{color:#5e6d6f !important}.has-background-grey{background-color:#5e6d6f !important}.has-text-grey-light{color:#8c9b9d !important}.has-background-grey-light{background-color:#8c9b9d !important}.has-text-grey-lighter{color:#dbdee0 !important}.has-background-grey-lighter{background-color:#dbdee0 !important}.has-text-white-ter{color:#ecf0f1 !important}.has-background-white-ter{background-color:#ecf0f1 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-relative{position:relative !important}html.theme--documenter-dark{/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/}html.theme--documenter-dark html{background-color:#1f2424;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark article,html.theme--documenter-dark aside,html.theme--documenter-dark figure,html.theme--documenter-dark footer,html.theme--documenter-dark header,html.theme--documenter-dark hgroup,html.theme--documenter-dark section{display:block}html.theme--documenter-dark body,html.theme--documenter-dark button,html.theme--documenter-dark input,html.theme--documenter-dark select,html.theme--documenter-dark textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}html.theme--documenter-dark code,html.theme--documenter-dark pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}html.theme--documenter-dark body{color:#fff;font-size:1em;font-weight:400;line-height:1.5}html.theme--documenter-dark a{color:#1abc9c;cursor:pointer;text-decoration:none}html.theme--documenter-dark a strong{color:currentColor}html.theme--documenter-dark a:hover{color:#1dd2af}html.theme--documenter-dark code{background-color:rgba(255,255,255,0.05);color:#ececec;font-size:.875em;font-weight:normal;padding:.1em}html.theme--documenter-dark hr{background-color:#282f2f;border:none;display:block;height:2px;margin:1.5rem 0}html.theme--documenter-dark img{height:auto;max-width:100%}html.theme--documenter-dark input[type="checkbox"],html.theme--documenter-dark input[type="radio"]{vertical-align:baseline}html.theme--documenter-dark small{font-size:.875em}html.theme--documenter-dark span{font-style:inherit;font-weight:inherit}html.theme--documenter-dark strong{color:#f2f2f2;font-weight:700}html.theme--documenter-dark fieldset{border:none}html.theme--documenter-dark pre{-webkit-overflow-scrolling:touch;background-color:#282f2f;color:#fff;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}html.theme--documenter-dark pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}html.theme--documenter-dark table td,html.theme--documenter-dark table th{vertical-align:top}html.theme--documenter-dark table td:not([align]),html.theme--documenter-dark table th:not([align]){text-align:left}html.theme--documenter-dark table th{color:#f2f2f2}html.theme--documenter-dark .box{background-color:#343c3d;border-radius:8px;box-shadow:none;color:#fff;display:block;padding:1.25rem}html.theme--documenter-dark a.box:hover,html.theme--documenter-dark a.box:focus{box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px #1abc9c}html.theme--documenter-dark a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #1abc9c}html.theme--documenter-dark .button{background-color:#282f2f;border-color:#4c5759;border-width:1px;color:#375a7f;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:.75em;padding-right:.75em;padding-top:calc(0.375em - 1px);text-align:center;white-space:nowrap}html.theme--documenter-dark .button strong{color:inherit}html.theme--documenter-dark .button .icon,html.theme--documenter-dark .button .icon.is-small,html.theme--documenter-dark .button #documenter .docs-sidebar form.docs-search>input.icon,html.theme--documenter-dark #documenter .docs-sidebar .button form.docs-search>input.icon,html.theme--documenter-dark .button .icon.is-medium,html.theme--documenter-dark .button .icon.is-large{height:1.5em;width:1.5em}html.theme--documenter-dark .button .icon:first-child:not(:last-child){margin-left:calc(-0.375em - 1px);margin-right:0.1875em}html.theme--documenter-dark .button .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:calc(-0.375em - 1px)}html.theme--documenter-dark .button .icon:first-child:last-child{margin-left:calc(-0.375em - 1px);margin-right:calc(-0.375em - 1px)}html.theme--documenter-dark .button:hover,html.theme--documenter-dark .button.is-hovered{border-color:#8c9b9d;color:#f2f2f2}html.theme--documenter-dark .button:focus,html.theme--documenter-dark .button.is-focused{border-color:#8c9b9d;color:#17a689}html.theme--documenter-dark .button:focus:not(:active),html.theme--documenter-dark .button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button:active,html.theme--documenter-dark .button.is-active{border-color:#343c3d;color:#f2f2f2}html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;color:#fff;text-decoration:underline}html.theme--documenter-dark .button.is-text:hover,html.theme--documenter-dark .button.is-text.is-hovered,html.theme--documenter-dark .button.is-text:focus,html.theme--documenter-dark .button.is-text.is-focused{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .button.is-text:active,html.theme--documenter-dark .button.is-text.is-active{background-color:#1d2122;color:#f2f2f2}html.theme--documenter-dark .button.is-text[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:hover,html.theme--documenter-dark .button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus,html.theme--documenter-dark .button.is-white.is-focused{border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white:focus:not(:active),html.theme--documenter-dark .button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .button.is-white[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-hovered{background-color:#000}html.theme--documenter-dark .button.is-white.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-white.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-white.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:hover,html.theme--documenter-dark .button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus,html.theme--documenter-dark .button.is-black.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black:focus:not(:active),html.theme--documenter-dark .button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-black[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-black.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-black.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}html.theme--documenter-dark .button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;color:#282f2f}html.theme--documenter-dark .button.is-light:hover,html.theme--documenter-dark .button.is-light.is-hovered{background-color:#e5eaec;border-color:transparent;color:#282f2f}html.theme--documenter-dark .button.is-light:focus,html.theme--documenter-dark .button.is-light.is-focused{border-color:transparent;color:#282f2f}html.theme--documenter-dark .button.is-light:focus:not(:active),html.theme--documenter-dark .button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light.is-active{background-color:#dde4e6;border-color:transparent;color:#282f2f}html.theme--documenter-dark .button.is-light[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light{background-color:#ecf0f1;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-light.is-inverted{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-hovered{background-color:#1d2122}html.theme--documenter-dark .button.is-light.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted{background-color:#282f2f;border-color:transparent;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-outlined.is-focused{background-color:#ecf0f1;border-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-light.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-focused{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark,html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover,html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered{background-color:#232829;border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused{border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .button.is-dark:focus:not(:active),html.theme--documenter-dark .content kbd.button:focus:not(:active),html.theme--documenter-dark .button.is-dark.is-focused:not(:active),html.theme--documenter-dark .content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active{background-color:#1d2122;border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .button.is-dark[disabled],html.theme--documenter-dark .content kbd.button[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark,fieldset[disabled] html.theme--documenter-dark .content kbd.button{background-color:#282f2f;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-dark.is-inverted,html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted:hover,html.theme--documenter-dark .content kbd.button.is-inverted:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-hovered{background-color:#dde4e6}html.theme--documenter-dark .button.is-dark.is-inverted[disabled],html.theme--documenter-dark .content kbd.button.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted{background-color:#ecf0f1;border-color:transparent;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-loading::after,html.theme--documenter-dark .content kbd.button.is-loading::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-dark.is-outlined,html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-outlined.is-focused{background-color:#282f2f;border-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ecf0f1 #ecf0f1 !important}html.theme--documenter-dark .button.is-dark.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-outlined{background-color:transparent;border-color:#282f2f;box-shadow:none;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#ecf0f1;color:#ecf0f1}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:hover,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined:focus,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-focused{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #282f2f #282f2f !important}html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined[disabled],html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-dark.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#ecf0f1;box-shadow:none;color:#ecf0f1}html.theme--documenter-dark .button.is-primary,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary:focus:not(:active),html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus:not(:active),html.theme--documenter-dark .button.is-primary.is-focused:not(:active),html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-primary[disabled],html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink{background-color:#375a7f;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-primary.is-inverted,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}html.theme--documenter-dark .button.is-primary.is-inverted[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-primary.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#375a7f;box-shadow:none;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:hover,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined:focus,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#375a7f}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #375a7f #375a7f !important}html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined[disabled],html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-primary.is-inverted.is-outlined,fieldset[disabled] html.theme--documenter-dark .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:hover,html.theme--documenter-dark .button.is-link.is-hovered{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus,html.theme--documenter-dark .button.is-link.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link:focus:not(:active),html.theme--documenter-dark .button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link.is-active{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-link[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link{background-color:#1abc9c;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-link.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-outlined.is-focused{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-link.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-outlined{background-color:transparent;border-color:#1abc9c;box-shadow:none;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#1abc9c}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #1abc9c #1abc9c !important}html.theme--documenter-dark .button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:hover,html.theme--documenter-dark .button.is-info.is-hovered{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus,html.theme--documenter-dark .button.is-info.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info:focus:not(:active),html.theme--documenter-dark .button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info.is-active{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-info[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info{background-color:#024c7d;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-info.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;color:#024c7d}html.theme--documenter-dark .button.is-info.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-outlined.is-focused{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-info.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-outlined{background-color:transparent;border-color:#024c7d;box-shadow:none;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#024c7d}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #024c7d #024c7d !important}html.theme--documenter-dark .button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:hover,html.theme--documenter-dark .button.is-success.is-hovered{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus,html.theme--documenter-dark .button.is-success.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success:focus:not(:active),html.theme--documenter-dark .button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success.is-active{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-success[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success{background-color:#008438;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-success.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;color:#008438}html.theme--documenter-dark .button.is-success.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-outlined.is-focused{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-success.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-outlined{background-color:transparent;border-color:#008438;box-shadow:none;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#008438}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #008438 #008438 !important}html.theme--documenter-dark .button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:hover,html.theme--documenter-dark .button.is-warning.is-hovered{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus,html.theme--documenter-dark .button.is-warning.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning:focus:not(:active),html.theme--documenter-dark .button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning.is-active{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-warning[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning{background-color:#ad8100;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-warning.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-outlined.is-focused{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-warning.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-outlined{background-color:transparent;border-color:#ad8100;box-shadow:none;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-focused{background-color:#fff;color:#ad8100}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ad8100 #ad8100 !important}html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:hover,html.theme--documenter-dark .button.is-danger.is-hovered{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus,html.theme--documenter-dark .button.is-danger.is-focused{border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger:focus:not(:active),html.theme--documenter-dark .button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger.is-active{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .button.is-danger[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger{background-color:#9e1b0d;border-color:transparent;box-shadow:none}html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}html.theme--documenter-dark .button.is-danger.is-inverted[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-outlined.is-focused{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}html.theme--documenter-dark .button.is-danger.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-outlined{background-color:transparent;border-color:#9e1b0d;box-shadow:none;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:hover,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-hovered,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined:focus,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#9e1b0d}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:hover::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading:focus::after,html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #9e1b0d #9e1b0d !important}html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] html.theme--documenter-dark .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}html.theme--documenter-dark .button.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:3px;font-size:.85em}html.theme--documenter-dark .button.is-normal{font-size:15px}html.theme--documenter-dark .button.is-medium{font-size:1.25rem}html.theme--documenter-dark .button.is-large{font-size:1.5rem}html.theme--documenter-dark .button[disabled],fieldset[disabled] html.theme--documenter-dark .button{background-color:#8c9b9d;border-color:#dbdee0;box-shadow:none;opacity:.5}html.theme--documenter-dark .button.is-fullwidth{display:flex;width:100%}html.theme--documenter-dark .button.is-loading{color:transparent !important;pointer-events:none}html.theme--documenter-dark .button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute !important}html.theme--documenter-dark .button.is-static{background-color:#282f2f;border-color:#5e6d6f;color:#dbdee0;box-shadow:none;pointer-events:none}html.theme--documenter-dark .button.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.button{border-radius:290486px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .buttons .button{margin-bottom:0.5rem}html.theme--documenter-dark .buttons .button:not(:last-child):not(.is-fullwidth){margin-right:0.5rem}html.theme--documenter-dark .buttons:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .buttons:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:3px;font-size:.85em}html.theme--documenter-dark .buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}html.theme--documenter-dark .buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}html.theme--documenter-dark .buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}html.theme--documenter-dark .buttons.has-addons .button:last-child{margin-right:0}html.theme--documenter-dark .buttons.has-addons .button:hover,html.theme--documenter-dark .buttons.has-addons .button.is-hovered{z-index:2}html.theme--documenter-dark .buttons.has-addons .button:focus,html.theme--documenter-dark .buttons.has-addons .button.is-focused,html.theme--documenter-dark .buttons.has-addons .button:active,html.theme--documenter-dark .buttons.has-addons .button.is-active,html.theme--documenter-dark .buttons.has-addons .button.is-selected{z-index:3}html.theme--documenter-dark .buttons.has-addons .button:focus:hover,html.theme--documenter-dark .buttons.has-addons .button.is-focused:hover,html.theme--documenter-dark .buttons.has-addons .button:active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-active:hover,html.theme--documenter-dark .buttons.has-addons .button.is-selected:hover{z-index:4}html.theme--documenter-dark .buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .buttons.is-centered{justify-content:center}html.theme--documenter-dark .buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .buttons.is-right{justify-content:flex-end}html.theme--documenter-dark .buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}html.theme--documenter-dark .container{flex-grow:1;margin:0 auto;position:relative;width:auto}@media screen and (min-width: 1056px){html.theme--documenter-dark .container{max-width:992px}html.theme--documenter-dark .container.is-fluid{margin-left:32px;margin-right:32px;max-width:none}}@media screen and (max-width: 1215px){html.theme--documenter-dark .container.is-widescreen{max-width:1152px}}@media screen and (max-width: 1407px){html.theme--documenter-dark .container.is-fullhd{max-width:1344px}}@media screen and (min-width: 1216px){html.theme--documenter-dark .container{max-width:1152px}}@media screen and (min-width: 1408px){html.theme--documenter-dark .container{max-width:1344px}}html.theme--documenter-dark .content li+li{margin-top:0.25em}html.theme--documenter-dark .content p:not(:last-child),html.theme--documenter-dark .content dl:not(:last-child),html.theme--documenter-dark .content ol:not(:last-child),html.theme--documenter-dark .content ul:not(:last-child),html.theme--documenter-dark .content blockquote:not(:last-child),html.theme--documenter-dark .content pre:not(:last-child),html.theme--documenter-dark .content table:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .content h1,html.theme--documenter-dark .content h2,html.theme--documenter-dark .content h3,html.theme--documenter-dark .content h4,html.theme--documenter-dark .content h5,html.theme--documenter-dark .content h6{color:#f2f2f2;font-weight:600;line-height:1.125}html.theme--documenter-dark .content h1{font-size:2em;margin-bottom:0.5em}html.theme--documenter-dark .content h1:not(:first-child){margin-top:1em}html.theme--documenter-dark .content h2{font-size:1.75em;margin-bottom:0.5714em}html.theme--documenter-dark .content h2:not(:first-child){margin-top:1.1428em}html.theme--documenter-dark .content h3{font-size:1.5em;margin-bottom:0.6666em}html.theme--documenter-dark .content h3:not(:first-child){margin-top:1.3333em}html.theme--documenter-dark .content h4{font-size:1.25em;margin-bottom:0.8em}html.theme--documenter-dark .content h5{font-size:1.125em;margin-bottom:0.8888em}html.theme--documenter-dark .content h6{font-size:1em;margin-bottom:1em}html.theme--documenter-dark .content blockquote{background-color:#282f2f;border-left:5px solid #5e6d6f;padding:1.25em 1.5em}html.theme--documenter-dark .content ol{list-style-position:outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ol:not([type]){list-style-type:decimal}html.theme--documenter-dark .content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}html.theme--documenter-dark .content ol.is-lower-roman:not([type]){list-style-type:lower-roman}html.theme--documenter-dark .content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}html.theme--documenter-dark .content ol.is-upper-roman:not([type]){list-style-type:upper-roman}html.theme--documenter-dark .content ul{list-style:disc outside;margin-left:2em;margin-top:1em}html.theme--documenter-dark .content ul ul{list-style-type:circle;margin-top:0.5em}html.theme--documenter-dark .content ul ul ul{list-style-type:square}html.theme--documenter-dark .content dd{margin-left:2em}html.theme--documenter-dark .content figure{margin-left:2em;margin-right:2em;text-align:center}html.theme--documenter-dark .content figure:not(:first-child){margin-top:2em}html.theme--documenter-dark .content figure:not(:last-child){margin-bottom:2em}html.theme--documenter-dark .content figure img{display:inline-block}html.theme--documenter-dark .content figure figcaption{font-style:italic}html.theme--documenter-dark .content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}html.theme--documenter-dark .content sup,html.theme--documenter-dark .content sub{font-size:75%}html.theme--documenter-dark .content table{width:100%}html.theme--documenter-dark .content table td,html.theme--documenter-dark .content table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .content table th{color:#f2f2f2}html.theme--documenter-dark .content table th:not([align]){text-align:left}html.theme--documenter-dark .content table thead td,html.theme--documenter-dark .content table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .content table tfoot td,html.theme--documenter-dark .content table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .content table tbody tr:last-child td,html.theme--documenter-dark .content table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .content .tabs li+li{margin-top:0}html.theme--documenter-dark .content.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.content{font-size:.85em}html.theme--documenter-dark .content.is-medium{font-size:1.25rem}html.theme--documenter-dark .content.is-large{font-size:1.5rem}html.theme--documenter-dark .icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}html.theme--documenter-dark .icon.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}html.theme--documenter-dark .icon.is-medium{height:2rem;width:2rem}html.theme--documenter-dark .icon.is-large{height:3rem;width:3rem}html.theme--documenter-dark .image,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{display:block;position:relative}html.theme--documenter-dark .image img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}html.theme--documenter-dark .image img.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:290486px}html.theme--documenter-dark .image.is-square img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square img,html.theme--documenter-dark .image.is-square .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,html.theme--documenter-dark .image.is-1by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 img,html.theme--documenter-dark .image.is-1by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,html.theme--documenter-dark .image.is-5by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 img,html.theme--documenter-dark .image.is-5by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,html.theme--documenter-dark .image.is-4by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 img,html.theme--documenter-dark .image.is-4by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,html.theme--documenter-dark .image.is-3by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 img,html.theme--documenter-dark .image.is-3by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,html.theme--documenter-dark .image.is-5by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 img,html.theme--documenter-dark .image.is-5by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,html.theme--documenter-dark .image.is-16by9 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 img,html.theme--documenter-dark .image.is-16by9 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,html.theme--documenter-dark .image.is-2by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 img,html.theme--documenter-dark .image.is-2by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,html.theme--documenter-dark .image.is-3by1 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 img,html.theme--documenter-dark .image.is-3by1 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,html.theme--documenter-dark .image.is-4by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 img,html.theme--documenter-dark .image.is-4by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,html.theme--documenter-dark .image.is-3by4 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 img,html.theme--documenter-dark .image.is-3by4 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,html.theme--documenter-dark .image.is-2by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 img,html.theme--documenter-dark .image.is-2by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,html.theme--documenter-dark .image.is-3by5 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 img,html.theme--documenter-dark .image.is-3by5 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,html.theme--documenter-dark .image.is-9by16 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 img,html.theme--documenter-dark .image.is-9by16 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,html.theme--documenter-dark .image.is-1by2 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 img,html.theme--documenter-dark .image.is-1by2 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,html.theme--documenter-dark .image.is-1by3 img,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 img,html.theme--documenter-dark .image.is-1by3 .has-ratio,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}html.theme--documenter-dark .image.is-square,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-square,html.theme--documenter-dark .image.is-1by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}html.theme--documenter-dark .image.is-5by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}html.theme--documenter-dark .image.is-4by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}html.theme--documenter-dark .image.is-3by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}html.theme--documenter-dark .image.is-5by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}html.theme--documenter-dark .image.is-16by9,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}html.theme--documenter-dark .image.is-2by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}html.theme--documenter-dark .image.is-3by1,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}html.theme--documenter-dark .image.is-4by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}html.theme--documenter-dark .image.is-3by4,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}html.theme--documenter-dark .image.is-2by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}html.theme--documenter-dark .image.is-3by5,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}html.theme--documenter-dark .image.is-9by16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}html.theme--documenter-dark .image.is-1by2,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}html.theme--documenter-dark .image.is-1by3,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}html.theme--documenter-dark .image.is-16x16,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}html.theme--documenter-dark .image.is-24x24,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}html.theme--documenter-dark .image.is-32x32,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}html.theme--documenter-dark .image.is-48x48,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}html.theme--documenter-dark .image.is-64x64,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}html.theme--documenter-dark .image.is-96x96,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}html.theme--documenter-dark .image.is-128x128,html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}html.theme--documenter-dark .notification{background-color:#282f2f;border-radius:.4em;padding:1.25rem 2.5rem 1.25rem 1.5rem;position:relative}html.theme--documenter-dark .notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .notification strong{color:currentColor}html.theme--documenter-dark .notification code,html.theme--documenter-dark .notification pre{background:#fff}html.theme--documenter-dark .notification pre code{background:transparent}html.theme--documenter-dark .notification>.delete{position:absolute;right:0.5rem;top:0.5rem}html.theme--documenter-dark .notification .title,html.theme--documenter-dark .notification .subtitle,html.theme--documenter-dark .notification .content{color:currentColor}html.theme--documenter-dark .notification.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .notification.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .notification.is-light{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .notification.is-dark,html.theme--documenter-dark .content kbd.notification{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .notification.is-primary,html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .notification.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .notification.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .notification.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .notification.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .notification.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:15px;overflow:hidden;padding:0;width:100%}html.theme--documenter-dark .progress::-webkit-progress-bar{background-color:#5e6d6f}html.theme--documenter-dark .progress::-webkit-progress-value{background-color:#dbdee0}html.theme--documenter-dark .progress::-moz-progress-bar{background-color:#dbdee0}html.theme--documenter-dark .progress::-ms-fill{background-color:#dbdee0;border:none}html.theme--documenter-dark .progress.is-white::-webkit-progress-value{background-color:#fff}html.theme--documenter-dark .progress.is-white::-moz-progress-bar{background-color:#fff}html.theme--documenter-dark .progress.is-white::-ms-fill{background-color:#fff}html.theme--documenter-dark .progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-black::-webkit-progress-value{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-moz-progress-bar{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black::-ms-fill{background-color:#0a0a0a}html.theme--documenter-dark .progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-light::-webkit-progress-value{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-moz-progress-bar{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light::-ms-fill{background-color:#ecf0f1}html.theme--documenter-dark .progress.is-light:indeterminate{background-image:linear-gradient(to right, #ecf0f1 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-dark::-webkit-progress-value,html.theme--documenter-dark .content kbd.progress::-webkit-progress-value{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-moz-progress-bar,html.theme--documenter-dark .content kbd.progress::-moz-progress-bar{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark::-ms-fill,html.theme--documenter-dark .content kbd.progress::-ms-fill{background-color:#282f2f}html.theme--documenter-dark .progress.is-dark:indeterminate,html.theme--documenter-dark .content kbd.progress:indeterminate{background-image:linear-gradient(to right, #282f2f 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-primary::-webkit-progress-value,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-moz-progress-bar,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary::-ms-fill,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#375a7f}html.theme--documenter-dark .progress.is-primary:indeterminate,html.theme--documenter-dark .docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #375a7f 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-link::-webkit-progress-value{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-moz-progress-bar{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link::-ms-fill{background-color:#1abc9c}html.theme--documenter-dark .progress.is-link:indeterminate{background-image:linear-gradient(to right, #1abc9c 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-info::-webkit-progress-value{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-moz-progress-bar{background-color:#024c7d}html.theme--documenter-dark .progress.is-info::-ms-fill{background-color:#024c7d}html.theme--documenter-dark .progress.is-info:indeterminate{background-image:linear-gradient(to right, #024c7d 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-success::-webkit-progress-value{background-color:#008438}html.theme--documenter-dark .progress.is-success::-moz-progress-bar{background-color:#008438}html.theme--documenter-dark .progress.is-success::-ms-fill{background-color:#008438}html.theme--documenter-dark .progress.is-success:indeterminate{background-image:linear-gradient(to right, #008438 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-warning::-webkit-progress-value{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-moz-progress-bar{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning::-ms-fill{background-color:#ad8100}html.theme--documenter-dark .progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ad8100 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress.is-danger::-webkit-progress-value{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-moz-progress-bar{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger::-ms-fill{background-color:#9e1b0d}html.theme--documenter-dark .progress.is-danger:indeterminate{background-image:linear-gradient(to right, #9e1b0d 30%, #5e6d6f 30%)}html.theme--documenter-dark .progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#5e6d6f;background-image:linear-gradient(to right, #fff 30%, #5e6d6f 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}html.theme--documenter-dark .progress:indeterminate::-webkit-progress-bar{background-color:transparent}html.theme--documenter-dark .progress:indeterminate::-moz-progress-bar{background-color:transparent}html.theme--documenter-dark .progress.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.progress{height:.85em}html.theme--documenter-dark .progress.is-medium{height:1.25rem}html.theme--documenter-dark .progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}html.theme--documenter-dark .table{background-color:#343c3d;color:#fff}html.theme--documenter-dark .table td,html.theme--documenter-dark .table th{border:1px solid #5e6d6f;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}html.theme--documenter-dark .table td.is-white,html.theme--documenter-dark .table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .table td.is-black,html.theme--documenter-dark .table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .table td.is-light,html.theme--documenter-dark .table th.is-light{background-color:#ecf0f1;border-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .table td.is-dark,html.theme--documenter-dark .table th.is-dark{background-color:#282f2f;border-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .table td.is-primary,html.theme--documenter-dark .table th.is-primary{background-color:#375a7f;border-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-link,html.theme--documenter-dark .table th.is-link{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .table td.is-info,html.theme--documenter-dark .table th.is-info{background-color:#024c7d;border-color:#024c7d;color:#fff}html.theme--documenter-dark .table td.is-success,html.theme--documenter-dark .table th.is-success{background-color:#008438;border-color:#008438;color:#fff}html.theme--documenter-dark .table td.is-warning,html.theme--documenter-dark .table th.is-warning{background-color:#ad8100;border-color:#ad8100;color:#fff}html.theme--documenter-dark .table td.is-danger,html.theme--documenter-dark .table th.is-danger{background-color:#9e1b0d;border-color:#9e1b0d;color:#fff}html.theme--documenter-dark .table td.is-narrow,html.theme--documenter-dark .table th.is-narrow{white-space:nowrap;width:1%}html.theme--documenter-dark .table td.is-selected,html.theme--documenter-dark .table th.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table td.is-selected a,html.theme--documenter-dark .table td.is-selected strong,html.theme--documenter-dark .table th.is-selected a,html.theme--documenter-dark .table th.is-selected strong{color:currentColor}html.theme--documenter-dark .table th{color:#f2f2f2}html.theme--documenter-dark .table th:not([align]){text-align:left}html.theme--documenter-dark .table tr.is-selected{background-color:#375a7f;color:#fff}html.theme--documenter-dark .table tr.is-selected a,html.theme--documenter-dark .table tr.is-selected strong{color:currentColor}html.theme--documenter-dark .table tr.is-selected td,html.theme--documenter-dark .table tr.is-selected th{border-color:#fff;color:currentColor}html.theme--documenter-dark .table thead{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table thead td,html.theme--documenter-dark .table thead th{border-width:0 0 2px;color:#f2f2f2}html.theme--documenter-dark .table tfoot{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tfoot td,html.theme--documenter-dark .table tfoot th{border-width:2px 0 0;color:#f2f2f2}html.theme--documenter-dark .table tbody{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .table tbody tr:last-child td,html.theme--documenter-dark .table tbody tr:last-child th{border-bottom-width:0}html.theme--documenter-dark .table.is-bordered td,html.theme--documenter-dark .table.is-bordered th{border-width:1px}html.theme--documenter-dark .table.is-bordered tr:last-child td,html.theme--documenter-dark .table.is-bordered tr:last-child th{border-bottom-width:1px}html.theme--documenter-dark .table.is-fullwidth{width:100%}html.theme--documenter-dark .table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#282f2f}html.theme--documenter-dark .table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#2d3435}html.theme--documenter-dark .table.is-narrow td,html.theme--documenter-dark .table.is-narrow th{padding:0.25em 0.5em}html.theme--documenter-dark .table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#282f2f}html.theme--documenter-dark .table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}html.theme--documenter-dark .tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .tags .tag,html.theme--documenter-dark .tags .content kbd,html.theme--documenter-dark .content .tags kbd,html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}html.theme--documenter-dark .tags .tag:not(:last-child),html.theme--documenter-dark .tags .content kbd:not(:last-child),html.theme--documenter-dark .content .tags kbd:not(:last-child),html.theme--documenter-dark .tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0.5rem}html.theme--documenter-dark .tags:last-child{margin-bottom:-0.5rem}html.theme--documenter-dark .tags:not(:last-child){margin-bottom:1rem}html.theme--documenter-dark .tags.are-medium .tag:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .content kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .content .tags.are-medium kbd:not(.is-normal):not(.is-large),html.theme--documenter-dark .tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:15px}html.theme--documenter-dark .tags.are-large .tag:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .content kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .content .tags.are-large kbd:not(.is-normal):not(.is-medium),html.theme--documenter-dark .tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}html.theme--documenter-dark .tags.is-centered{justify-content:center}html.theme--documenter-dark .tags.is-centered .tag,html.theme--documenter-dark .tags.is-centered .content kbd,html.theme--documenter-dark .content .tags.is-centered kbd,html.theme--documenter-dark .tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}html.theme--documenter-dark .tags.is-right{justify-content:flex-end}html.theme--documenter-dark .tags.is-right .tag:not(:first-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:first-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}html.theme--documenter-dark .tags.is-right .tag:not(:last-child),html.theme--documenter-dark .tags.is-right .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.is-right kbd:not(:last-child),html.theme--documenter-dark .tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}html.theme--documenter-dark .tags.has-addons .tag,html.theme--documenter-dark .tags.has-addons .content kbd,html.theme--documenter-dark .content .tags.has-addons kbd,html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}html.theme--documenter-dark .tags.has-addons .tag:not(:first-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:first-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:first-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .tags.has-addons .tag:not(:last-child),html.theme--documenter-dark .tags.has-addons .content kbd:not(:last-child),html.theme--documenter-dark .content .tags.has-addons kbd:not(:last-child),html.theme--documenter-dark .tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .tag:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#282f2f;border-radius:.4em;color:#fff;display:inline-flex;font-size:.85em;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .tag:not(body) .delete,html.theme--documenter-dark .content kbd:not(body) .delete,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}html.theme--documenter-dark .tag.is-white:not(body),html.theme--documenter-dark .content kbd.is-white:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .tag.is-black:not(body),html.theme--documenter-dark .content kbd.is-black:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .tag.is-light:not(body),html.theme--documenter-dark .content kbd.is-light:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .tag.is-dark:not(body),html.theme--documenter-dark .content kbd:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-dark:not(body),html.theme--documenter-dark .content .docstring>section>kbd:not(body){background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .tag.is-primary:not(body),html.theme--documenter-dark .content kbd.is-primary:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body){background-color:#375a7f;color:#fff}html.theme--documenter-dark .tag.is-link:not(body),html.theme--documenter-dark .content kbd.is-link:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#1abc9c;color:#fff}html.theme--documenter-dark .tag.is-info:not(body),html.theme--documenter-dark .content kbd.is-info:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#024c7d;color:#fff}html.theme--documenter-dark .tag.is-success:not(body),html.theme--documenter-dark .content kbd.is-success:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#008438;color:#fff}html.theme--documenter-dark .tag.is-warning:not(body),html.theme--documenter-dark .content kbd.is-warning:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ad8100;color:#fff}html.theme--documenter-dark .tag.is-danger:not(body),html.theme--documenter-dark .content kbd.is-danger:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .tag.is-normal:not(body),html.theme--documenter-dark .content kbd.is-normal:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.85em}html.theme--documenter-dark .tag.is-medium:not(body),html.theme--documenter-dark .content kbd.is-medium:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:15px}html.theme--documenter-dark .tag.is-large:not(body),html.theme--documenter-dark .content kbd.is-large:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}html.theme--documenter-dark .tag:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .content kbd:not(body) .icon:first-child:not(:last-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}html.theme--documenter-dark .tag:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .content kbd:not(body) .icon:last-child:not(:first-child),html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}html.theme--documenter-dark .tag:not(body) .icon:first-child:last-child,html.theme--documenter-dark .content kbd:not(body) .icon:first-child:last-child,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}html.theme--documenter-dark .tag.is-delete:not(body),html.theme--documenter-dark .content kbd.is-delete:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before,html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}html.theme--documenter-dark .tag.is-delete:not(body)::before,html.theme--documenter-dark .content kbd.is-delete:not(body)::before,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}html.theme--documenter-dark .tag.is-delete:not(body)::after,html.theme--documenter-dark .content kbd.is-delete:not(body)::after,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}html.theme--documenter-dark .tag.is-delete:not(body):hover,html.theme--documenter-dark .content kbd.is-delete:not(body):hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):hover,html.theme--documenter-dark .tag.is-delete:not(body):focus,html.theme--documenter-dark .content kbd.is-delete:not(body):focus,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#1d2122}html.theme--documenter-dark .tag.is-delete:not(body):active,html.theme--documenter-dark .content kbd.is-delete:not(body):active,html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#111414}html.theme--documenter-dark .tag.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:not(body),html.theme--documenter-dark .content kbd.is-rounded:not(body),html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input:not(body),html.theme--documenter-dark .docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:290486px}html.theme--documenter-dark a.tag:hover,html.theme--documenter-dark .docstring>section>a.docs-sourcelink:hover{text-decoration:underline}html.theme--documenter-dark .title,html.theme--documenter-dark .subtitle{word-break:break-word}html.theme--documenter-dark .title em,html.theme--documenter-dark .title span,html.theme--documenter-dark .subtitle em,html.theme--documenter-dark .subtitle span{font-weight:inherit}html.theme--documenter-dark .title sub,html.theme--documenter-dark .subtitle sub{font-size:.75em}html.theme--documenter-dark .title sup,html.theme--documenter-dark .subtitle sup{font-size:.75em}html.theme--documenter-dark .title .tag,html.theme--documenter-dark .title .content kbd,html.theme--documenter-dark .content .title kbd,html.theme--documenter-dark .title .docstring>section>a.docs-sourcelink,html.theme--documenter-dark .subtitle .tag,html.theme--documenter-dark .subtitle .content kbd,html.theme--documenter-dark .content .subtitle kbd,html.theme--documenter-dark .subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}html.theme--documenter-dark .title{color:#fff;font-size:2rem;font-weight:500;line-height:1.125}html.theme--documenter-dark .title strong{color:inherit;font-weight:inherit}html.theme--documenter-dark .title+.highlight{margin-top:-0.75rem}html.theme--documenter-dark .title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}html.theme--documenter-dark .title.is-1{font-size:3rem}html.theme--documenter-dark .title.is-2{font-size:2.5rem}html.theme--documenter-dark .title.is-3{font-size:2rem}html.theme--documenter-dark .title.is-4{font-size:1.5rem}html.theme--documenter-dark .title.is-5{font-size:1.25rem}html.theme--documenter-dark .title.is-6{font-size:15px}html.theme--documenter-dark .title.is-7{font-size:.85em}html.theme--documenter-dark .subtitle{color:#8c9b9d;font-size:1.25rem;font-weight:400;line-height:1.25}html.theme--documenter-dark .subtitle strong{color:#8c9b9d;font-weight:600}html.theme--documenter-dark .subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}html.theme--documenter-dark .subtitle.is-1{font-size:3rem}html.theme--documenter-dark .subtitle.is-2{font-size:2.5rem}html.theme--documenter-dark .subtitle.is-3{font-size:2rem}html.theme--documenter-dark .subtitle.is-4{font-size:1.5rem}html.theme--documenter-dark .subtitle.is-5{font-size:1.25rem}html.theme--documenter-dark .subtitle.is-6{font-size:15px}html.theme--documenter-dark .subtitle.is-7{font-size:.85em}html.theme--documenter-dark .heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}html.theme--documenter-dark .highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}html.theme--documenter-dark .highlight pre{overflow:auto;max-width:100%}html.theme--documenter-dark .number{align-items:center;background-color:#282f2f;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#1f2424;border-color:#5e6d6f;border-radius:.4em;color:#dbdee0}html.theme--documenter-dark .select select::-moz-placeholder,html.theme--documenter-dark .textarea::-moz-placeholder,html.theme--documenter-dark .input::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select::-webkit-input-placeholder,html.theme--documenter-dark .textarea::-webkit-input-placeholder,html.theme--documenter-dark .input::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:-moz-placeholder,html.theme--documenter-dark .textarea:-moz-placeholder,html.theme--documenter-dark .input:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:-ms-input-placeholder,html.theme--documenter-dark .textarea:-ms-input-placeholder,html.theme--documenter-dark .input:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(219,222,224,0.3)}html.theme--documenter-dark .select select:hover,html.theme--documenter-dark .textarea:hover,html.theme--documenter-dark .input:hover,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:hover,html.theme--documenter-dark .select select.is-hovered,html.theme--documenter-dark .is-hovered.textarea,html.theme--documenter-dark .is-hovered.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#8c9b9d}html.theme--documenter-dark .select select:focus,html.theme--documenter-dark .textarea:focus,html.theme--documenter-dark .input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:focus,html.theme--documenter-dark .select select.is-focused,html.theme--documenter-dark .is-focused.textarea,html.theme--documenter-dark .is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .select select:active,html.theme--documenter-dark .textarea:active,html.theme--documenter-dark .input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:active,html.theme--documenter-dark .select select.is-active,html.theme--documenter-dark .is-active.textarea,html.theme--documenter-dark .is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{border-color:#1abc9c;box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select select[disabled],html.theme--documenter-dark .textarea[disabled],html.theme--documenter-dark .input[disabled],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] html.theme--documenter-dark .select select,fieldset[disabled] html.theme--documenter-dark .textarea,fieldset[disabled] html.theme--documenter-dark .input,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{background-color:#8c9b9d;border-color:#282f2f;box-shadow:none;color:#fff}html.theme--documenter-dark .select select[disabled]::-moz-placeholder,html.theme--documenter-dark .textarea[disabled]::-moz-placeholder,html.theme--documenter-dark .input[disabled]::-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .textarea[disabled]::-webkit-input-placeholder,html.theme--documenter-dark .input[disabled]::-webkit-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input::-webkit-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-moz-placeholder,html.theme--documenter-dark .textarea[disabled]:-moz-placeholder,html.theme--documenter-dark .input[disabled]:-moz-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-moz-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .select select[disabled]:-ms-input-placeholder,html.theme--documenter-dark .textarea[disabled]:-ms-input-placeholder,html.theme--documenter-dark .input[disabled]:-ms-input-placeholder,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .select select:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .textarea:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark .input:-ms-input-placeholder,fieldset[disabled] html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(255,255,255,0.3)}html.theme--documenter-dark .textarea,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}html.theme--documenter-dark .textarea[readonly],html.theme--documenter-dark .input[readonly],html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}html.theme--documenter-dark .is-white.textarea,html.theme--documenter-dark .is-white.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}html.theme--documenter-dark .is-white.textarea:focus,html.theme--documenter-dark .is-white.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:focus,html.theme--documenter-dark .is-white.is-focused.textarea,html.theme--documenter-dark .is-white.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-white.textarea:active,html.theme--documenter-dark .is-white.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-white:active,html.theme--documenter-dark .is-white.is-active.textarea,html.theme--documenter-dark .is-white.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .is-black.textarea,html.theme--documenter-dark .is-black.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}html.theme--documenter-dark .is-black.textarea:focus,html.theme--documenter-dark .is-black.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:focus,html.theme--documenter-dark .is-black.is-focused.textarea,html.theme--documenter-dark .is-black.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-black.textarea:active,html.theme--documenter-dark .is-black.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-black:active,html.theme--documenter-dark .is-black.is-active.textarea,html.theme--documenter-dark .is-black.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .is-light.textarea,html.theme--documenter-dark .is-light.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light{border-color:#ecf0f1}html.theme--documenter-dark .is-light.textarea:focus,html.theme--documenter-dark .is-light.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:focus,html.theme--documenter-dark .is-light.is-focused.textarea,html.theme--documenter-dark .is-light.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-light.textarea:active,html.theme--documenter-dark .is-light.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-light:active,html.theme--documenter-dark .is-light.is-active.textarea,html.theme--documenter-dark .is-light.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .is-dark.textarea,html.theme--documenter-dark .content kbd.textarea,html.theme--documenter-dark .is-dark.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark,html.theme--documenter-dark .content kbd.input{border-color:#282f2f}html.theme--documenter-dark .is-dark.textarea:focus,html.theme--documenter-dark .content kbd.textarea:focus,html.theme--documenter-dark .is-dark.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:focus,html.theme--documenter-dark .content kbd.input:focus,html.theme--documenter-dark .is-dark.is-focused.textarea,html.theme--documenter-dark .content kbd.is-focused.textarea,html.theme--documenter-dark .is-dark.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .content kbd.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-focused,html.theme--documenter-dark .is-dark.textarea:active,html.theme--documenter-dark .content kbd.textarea:active,html.theme--documenter-dark .is-dark.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-dark:active,html.theme--documenter-dark .content kbd.input:active,html.theme--documenter-dark .is-dark.is-active.textarea,html.theme--documenter-dark .content kbd.is-active.textarea,html.theme--documenter-dark .is-dark.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .content kbd.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .is-primary.textarea,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink{border-color:#375a7f}html.theme--documenter-dark .is-primary.textarea:focus,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:focus,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:focus,html.theme--documenter-dark .is-primary.is-focused.textarea,html.theme--documenter-dark .docstring>section>a.is-focused.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .docstring>section>a.is-focused.input.docs-sourcelink,html.theme--documenter-dark .is-primary.textarea:active,html.theme--documenter-dark .docstring>section>a.textarea.docs-sourcelink:active,html.theme--documenter-dark .is-primary.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-primary:active,html.theme--documenter-dark .docstring>section>a.input.docs-sourcelink:active,html.theme--documenter-dark .is-primary.is-active.textarea,html.theme--documenter-dark .docstring>section>a.is-active.textarea.docs-sourcelink,html.theme--documenter-dark .is-primary.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active,html.theme--documenter-dark .docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .is-link.textarea,html.theme--documenter-dark .is-link.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link{border-color:#1abc9c}html.theme--documenter-dark .is-link.textarea:focus,html.theme--documenter-dark .is-link.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:focus,html.theme--documenter-dark .is-link.is-focused.textarea,html.theme--documenter-dark .is-link.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-link.textarea:active,html.theme--documenter-dark .is-link.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-link:active,html.theme--documenter-dark .is-link.is-active.textarea,html.theme--documenter-dark .is-link.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .is-info.textarea,html.theme--documenter-dark .is-info.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info{border-color:#024c7d}html.theme--documenter-dark .is-info.textarea:focus,html.theme--documenter-dark .is-info.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:focus,html.theme--documenter-dark .is-info.is-focused.textarea,html.theme--documenter-dark .is-info.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-info.textarea:active,html.theme--documenter-dark .is-info.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-info:active,html.theme--documenter-dark .is-info.is-active.textarea,html.theme--documenter-dark .is-info.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .is-success.textarea,html.theme--documenter-dark .is-success.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success{border-color:#008438}html.theme--documenter-dark .is-success.textarea:focus,html.theme--documenter-dark .is-success.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:focus,html.theme--documenter-dark .is-success.is-focused.textarea,html.theme--documenter-dark .is-success.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-success.textarea:active,html.theme--documenter-dark .is-success.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-success:active,html.theme--documenter-dark .is-success.is-active.textarea,html.theme--documenter-dark .is-success.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .is-warning.textarea,html.theme--documenter-dark .is-warning.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ad8100}html.theme--documenter-dark .is-warning.textarea:focus,html.theme--documenter-dark .is-warning.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:focus,html.theme--documenter-dark .is-warning.is-focused.textarea,html.theme--documenter-dark .is-warning.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-warning.textarea:active,html.theme--documenter-dark .is-warning.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-warning:active,html.theme--documenter-dark .is-warning.is-active.textarea,html.theme--documenter-dark .is-warning.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .is-danger.textarea,html.theme--documenter-dark .is-danger.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#9e1b0d}html.theme--documenter-dark .is-danger.textarea:focus,html.theme--documenter-dark .is-danger.input:focus,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:focus,html.theme--documenter-dark .is-danger.is-focused.textarea,html.theme--documenter-dark .is-danger.is-focused.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-focused,html.theme--documenter-dark .is-danger.textarea:active,html.theme--documenter-dark .is-danger.input:active,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-danger:active,html.theme--documenter-dark .is-danger.is-active.textarea,html.theme--documenter-dark .is-danger.is-active.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .is-small.textarea,html.theme--documenter-dark .is-small.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:3px;font-size:.85em}html.theme--documenter-dark .is-medium.textarea,html.theme--documenter-dark .is-medium.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}html.theme--documenter-dark .is-large.textarea,html.theme--documenter-dark .is-large.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}html.theme--documenter-dark .is-fullwidth.textarea,html.theme--documenter-dark .is-fullwidth.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}html.theme--documenter-dark .is-inline.textarea,html.theme--documenter-dark .is-inline.input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}html.theme--documenter-dark .input.is-rounded,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{border-radius:290486px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .input.is-static,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}html.theme--documenter-dark .textarea{display:block;max-width:100%;min-width:100%;padding:0.625em;resize:vertical}html.theme--documenter-dark .textarea:not([rows]){max-height:600px;min-height:120px}html.theme--documenter-dark .textarea[rows]{height:initial}html.theme--documenter-dark .textarea.has-fixed-size{resize:none}html.theme--documenter-dark .radio,html.theme--documenter-dark .checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}html.theme--documenter-dark .radio input,html.theme--documenter-dark .checkbox input{cursor:pointer}html.theme--documenter-dark .radio:hover,html.theme--documenter-dark .checkbox:hover{color:#8c9b9d}html.theme--documenter-dark .radio[disabled],html.theme--documenter-dark .checkbox[disabled],fieldset[disabled] html.theme--documenter-dark .radio,fieldset[disabled] html.theme--documenter-dark .checkbox{color:#fff;cursor:not-allowed}html.theme--documenter-dark .radio+.radio{margin-left:0.5em}html.theme--documenter-dark .select{display:inline-block;max-width:100%;position:relative;vertical-align:top}html.theme--documenter-dark .select:not(.is-multiple){height:2.25em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading)::after{border-color:#1abc9c;right:1.125em;z-index:4}html.theme--documenter-dark .select.is-rounded select,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select select{border-radius:290486px;padding-left:1em}html.theme--documenter-dark .select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}html.theme--documenter-dark .select select::-ms-expand{display:none}html.theme--documenter-dark .select select[disabled]:hover,fieldset[disabled] html.theme--documenter-dark .select select:hover{border-color:#282f2f}html.theme--documenter-dark .select select:not([multiple]){padding-right:2.5em}html.theme--documenter-dark .select select[multiple]{height:auto;padding:0}html.theme--documenter-dark .select select[multiple] option{padding:0.5em 1em}html.theme--documenter-dark .select:not(.is-multiple):not(.is-loading):hover::after{border-color:#8c9b9d}html.theme--documenter-dark .select.is-white:not(:hover)::after{border-color:#fff}html.theme--documenter-dark .select.is-white select{border-color:#fff}html.theme--documenter-dark .select.is-white select:hover,html.theme--documenter-dark .select.is-white select.is-hovered{border-color:#f2f2f2}html.theme--documenter-dark .select.is-white select:focus,html.theme--documenter-dark .select.is-white select.is-focused,html.theme--documenter-dark .select.is-white select:active,html.theme--documenter-dark .select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}html.theme--documenter-dark .select.is-black:not(:hover)::after{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select{border-color:#0a0a0a}html.theme--documenter-dark .select.is-black select:hover,html.theme--documenter-dark .select.is-black select.is-hovered{border-color:#000}html.theme--documenter-dark .select.is-black select:focus,html.theme--documenter-dark .select.is-black select.is-focused,html.theme--documenter-dark .select.is-black select:active,html.theme--documenter-dark .select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}html.theme--documenter-dark .select.is-light:not(:hover)::after{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select{border-color:#ecf0f1}html.theme--documenter-dark .select.is-light select:hover,html.theme--documenter-dark .select.is-light select.is-hovered{border-color:#dde4e6}html.theme--documenter-dark .select.is-light select:focus,html.theme--documenter-dark .select.is-light select.is-focused,html.theme--documenter-dark .select.is-light select:active,html.theme--documenter-dark .select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(236,240,241,0.25)}html.theme--documenter-dark .select.is-dark:not(:hover)::after,html.theme--documenter-dark .content kbd.select:not(:hover)::after{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select,html.theme--documenter-dark .content kbd.select select{border-color:#282f2f}html.theme--documenter-dark .select.is-dark select:hover,html.theme--documenter-dark .content kbd.select select:hover,html.theme--documenter-dark .select.is-dark select.is-hovered,html.theme--documenter-dark .content kbd.select select.is-hovered{border-color:#1d2122}html.theme--documenter-dark .select.is-dark select:focus,html.theme--documenter-dark .content kbd.select select:focus,html.theme--documenter-dark .select.is-dark select.is-focused,html.theme--documenter-dark .content kbd.select select.is-focused,html.theme--documenter-dark .select.is-dark select:active,html.theme--documenter-dark .content kbd.select select:active,html.theme--documenter-dark .select.is-dark select.is-active,html.theme--documenter-dark .content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(40,47,47,0.25)}html.theme--documenter-dark .select.is-primary:not(:hover)::after,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select{border-color:#375a7f}html.theme--documenter-dark .select.is-primary select:hover,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:hover,html.theme--documenter-dark .select.is-primary select.is-hovered,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#2f4d6d}html.theme--documenter-dark .select.is-primary select:focus,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:focus,html.theme--documenter-dark .select.is-primary select.is-focused,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-focused,html.theme--documenter-dark .select.is-primary select:active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select:active,html.theme--documenter-dark .select.is-primary select.is-active,html.theme--documenter-dark .docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(55,90,127,0.25)}html.theme--documenter-dark .select.is-link:not(:hover)::after{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select{border-color:#1abc9c}html.theme--documenter-dark .select.is-link select:hover,html.theme--documenter-dark .select.is-link select.is-hovered{border-color:#17a689}html.theme--documenter-dark .select.is-link select:focus,html.theme--documenter-dark .select.is-link select.is-focused,html.theme--documenter-dark .select.is-link select:active,html.theme--documenter-dark .select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(26,188,156,0.25)}html.theme--documenter-dark .select.is-info:not(:hover)::after{border-color:#024c7d}html.theme--documenter-dark .select.is-info select{border-color:#024c7d}html.theme--documenter-dark .select.is-info select:hover,html.theme--documenter-dark .select.is-info select.is-hovered{border-color:#023d64}html.theme--documenter-dark .select.is-info select:focus,html.theme--documenter-dark .select.is-info select.is-focused,html.theme--documenter-dark .select.is-info select:active,html.theme--documenter-dark .select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(2,76,125,0.25)}html.theme--documenter-dark .select.is-success:not(:hover)::after{border-color:#008438}html.theme--documenter-dark .select.is-success select{border-color:#008438}html.theme--documenter-dark .select.is-success select:hover,html.theme--documenter-dark .select.is-success select.is-hovered{border-color:#006b2d}html.theme--documenter-dark .select.is-success select:focus,html.theme--documenter-dark .select.is-success select.is-focused,html.theme--documenter-dark .select.is-success select:active,html.theme--documenter-dark .select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(0,132,56,0.25)}html.theme--documenter-dark .select.is-warning:not(:hover)::after{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select{border-color:#ad8100}html.theme--documenter-dark .select.is-warning select:hover,html.theme--documenter-dark .select.is-warning select.is-hovered{border-color:#946e00}html.theme--documenter-dark .select.is-warning select:focus,html.theme--documenter-dark .select.is-warning select.is-focused,html.theme--documenter-dark .select.is-warning select:active,html.theme--documenter-dark .select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(173,129,0,0.25)}html.theme--documenter-dark .select.is-danger:not(:hover)::after{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select{border-color:#9e1b0d}html.theme--documenter-dark .select.is-danger select:hover,html.theme--documenter-dark .select.is-danger select.is-hovered{border-color:#86170b}html.theme--documenter-dark .select.is-danger select:focus,html.theme--documenter-dark .select.is-danger select.is-focused,html.theme--documenter-dark .select.is-danger select:active,html.theme--documenter-dark .select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(158,27,13,0.25)}html.theme--documenter-dark .select.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.select{border-radius:3px;font-size:.85em}html.theme--documenter-dark .select.is-medium{font-size:1.25rem}html.theme--documenter-dark .select.is-large{font-size:1.5rem}html.theme--documenter-dark .select.is-disabled::after{border-color:#fff}html.theme--documenter-dark .select.is-fullwidth{width:100%}html.theme--documenter-dark .select.is-fullwidth select{width:100%}html.theme--documenter-dark .select.is-loading::after{margin-top:0;position:absolute;right:0.625em;top:0.625em;transform:none}html.theme--documenter-dark .select.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.85em}html.theme--documenter-dark .select.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .select.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}html.theme--documenter-dark .file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:hover .file-cta,html.theme--documenter-dark .file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-white:focus .file-cta,html.theme--documenter-dark .file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}html.theme--documenter-dark .file.is-white:active .file-cta,html.theme--documenter-dark .file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}html.theme--documenter-dark .file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:hover .file-cta,html.theme--documenter-dark .file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-black:focus .file-cta,html.theme--documenter-dark .file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}html.theme--documenter-dark .file.is-black:active .file-cta,html.theme--documenter-dark .file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-light .file-cta{background-color:#ecf0f1;border-color:transparent;color:#282f2f}html.theme--documenter-dark .file.is-light:hover .file-cta,html.theme--documenter-dark .file.is-light.is-hovered .file-cta{background-color:#e5eaec;border-color:transparent;color:#282f2f}html.theme--documenter-dark .file.is-light:focus .file-cta,html.theme--documenter-dark .file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(236,240,241,0.25);color:#282f2f}html.theme--documenter-dark .file.is-light:active .file-cta,html.theme--documenter-dark .file.is-light.is-active .file-cta{background-color:#dde4e6;border-color:transparent;color:#282f2f}html.theme--documenter-dark .file.is-dark .file-cta,html.theme--documenter-dark .content kbd.file .file-cta{background-color:#282f2f;border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .file.is-dark:hover .file-cta,html.theme--documenter-dark .content kbd.file:hover .file-cta,html.theme--documenter-dark .file.is-dark.is-hovered .file-cta,html.theme--documenter-dark .content kbd.file.is-hovered .file-cta{background-color:#232829;border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .file.is-dark:focus .file-cta,html.theme--documenter-dark .content kbd.file:focus .file-cta,html.theme--documenter-dark .file.is-dark.is-focused .file-cta,html.theme--documenter-dark .content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(40,47,47,0.25);color:#ecf0f1}html.theme--documenter-dark .file.is-dark:active .file-cta,html.theme--documenter-dark .content kbd.file:active .file-cta,html.theme--documenter-dark .file.is-dark.is-active .file-cta,html.theme--documenter-dark .content kbd.file.is-active .file-cta{background-color:#1d2122;border-color:transparent;color:#ecf0f1}html.theme--documenter-dark .file.is-primary .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink .file-cta{background-color:#375a7f;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:hover .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:hover .file-cta,html.theme--documenter-dark .file.is-primary.is-hovered .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#335476;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-primary:focus .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:focus .file-cta,html.theme--documenter-dark .file.is-primary.is-focused .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(55,90,127,0.25);color:#fff}html.theme--documenter-dark .file.is-primary:active .file-cta,html.theme--documenter-dark .docstring>section>a.file.docs-sourcelink:active .file-cta,html.theme--documenter-dark .file.is-primary.is-active .file-cta,html.theme--documenter-dark .docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#2f4d6d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link .file-cta{background-color:#1abc9c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:hover .file-cta,html.theme--documenter-dark .file.is-link.is-hovered .file-cta{background-color:#18b193;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-link:focus .file-cta,html.theme--documenter-dark .file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(26,188,156,0.25);color:#fff}html.theme--documenter-dark .file.is-link:active .file-cta,html.theme--documenter-dark .file.is-link.is-active .file-cta{background-color:#17a689;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info .file-cta{background-color:#024c7d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:hover .file-cta,html.theme--documenter-dark .file.is-info.is-hovered .file-cta{background-color:#024470;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-info:focus .file-cta,html.theme--documenter-dark .file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(2,76,125,0.25);color:#fff}html.theme--documenter-dark .file.is-info:active .file-cta,html.theme--documenter-dark .file.is-info.is-active .file-cta{background-color:#023d64;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success .file-cta{background-color:#008438;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:hover .file-cta,html.theme--documenter-dark .file.is-success.is-hovered .file-cta{background-color:#073;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-success:focus .file-cta,html.theme--documenter-dark .file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(0,132,56,0.25);color:#fff}html.theme--documenter-dark .file.is-success:active .file-cta,html.theme--documenter-dark .file.is-success.is-active .file-cta{background-color:#006b2d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning .file-cta{background-color:#ad8100;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:hover .file-cta,html.theme--documenter-dark .file.is-warning.is-hovered .file-cta{background-color:#a07700;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-warning:focus .file-cta,html.theme--documenter-dark .file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(173,129,0,0.25);color:#fff}html.theme--documenter-dark .file.is-warning:active .file-cta,html.theme--documenter-dark .file.is-warning.is-active .file-cta{background-color:#946e00;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger .file-cta{background-color:#9e1b0d;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:hover .file-cta,html.theme--documenter-dark .file.is-danger.is-hovered .file-cta{background-color:#92190c;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-danger:focus .file-cta,html.theme--documenter-dark .file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(158,27,13,0.25);color:#fff}html.theme--documenter-dark .file.is-danger:active .file-cta,html.theme--documenter-dark .file.is-danger.is-active .file-cta{background-color:#86170b;border-color:transparent;color:#fff}html.theme--documenter-dark .file.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.file{font-size:.85em}html.theme--documenter-dark .file.is-medium{font-size:1.25rem}html.theme--documenter-dark .file.is-medium .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-large{font-size:1.5rem}html.theme--documenter-dark .file.is-large .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .file.has-name.is-empty .file-cta{border-radius:.4em}html.theme--documenter-dark .file.has-name.is-empty .file-name{display:none}html.theme--documenter-dark .file.is-boxed .file-label{flex-direction:column}html.theme--documenter-dark .file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}html.theme--documenter-dark .file.is-boxed .file-name{border-width:0 1px 1px}html.theme--documenter-dark .file.is-boxed .file-icon{height:1.5em;width:1.5em}html.theme--documenter-dark .file.is-boxed .file-icon .fa{font-size:21px}html.theme--documenter-dark .file.is-boxed.is-small .file-icon .fa,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}html.theme--documenter-dark .file.is-boxed.is-medium .file-icon .fa{font-size:28px}html.theme--documenter-dark .file.is-boxed.is-large .file-icon .fa{font-size:35px}html.theme--documenter-dark .file.is-boxed.has-name .file-cta{border-radius:.4em .4em 0 0}html.theme--documenter-dark .file.is-boxed.has-name .file-name{border-radius:0 0 .4em .4em;border-width:0 1px 1px}html.theme--documenter-dark .file.is-centered{justify-content:center}html.theme--documenter-dark .file.is-fullwidth .file-label{width:100%}html.theme--documenter-dark .file.is-fullwidth .file-name{flex-grow:1;max-width:none}html.theme--documenter-dark .file.is-right{justify-content:flex-end}html.theme--documenter-dark .file.is-right .file-cta{border-radius:0 .4em .4em 0}html.theme--documenter-dark .file.is-right .file-name{border-radius:.4em 0 0 .4em;border-width:1px 0 1px 1px;order:-1}html.theme--documenter-dark .file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}html.theme--documenter-dark .file-label:hover .file-cta{background-color:#e5eaec;color:#282f2f}html.theme--documenter-dark .file-label:hover .file-name{border-color:#596668}html.theme--documenter-dark .file-label:active .file-cta{background-color:#dde4e6;color:#282f2f}html.theme--documenter-dark .file-label:active .file-name{border-color:#535f61}html.theme--documenter-dark .file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}html.theme--documenter-dark .file-cta,html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-radius:.4em;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}html.theme--documenter-dark .file-cta{background-color:#ecf0f1;color:#343c3d}html.theme--documenter-dark .file-name{border-color:#5e6d6f;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:left;text-overflow:ellipsis}html.theme--documenter-dark .file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:0.5em;width:1em}html.theme--documenter-dark .file-icon .fa{font-size:14px}html.theme--documenter-dark .label{color:#282f2f;display:block;font-size:15px;font-weight:700}html.theme--documenter-dark .label:not(:last-child){margin-bottom:0.5em}html.theme--documenter-dark .label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.label{font-size:.85em}html.theme--documenter-dark .label.is-medium{font-size:1.25rem}html.theme--documenter-dark .label.is-large{font-size:1.5rem}html.theme--documenter-dark .help{display:block;font-size:.85em;margin-top:0.25rem}html.theme--documenter-dark .help.is-white{color:#fff}html.theme--documenter-dark .help.is-black{color:#0a0a0a}html.theme--documenter-dark .help.is-light{color:#ecf0f1}html.theme--documenter-dark .help.is-dark,html.theme--documenter-dark .content kbd.help{color:#282f2f}html.theme--documenter-dark .help.is-primary,html.theme--documenter-dark .docstring>section>a.help.docs-sourcelink{color:#375a7f}html.theme--documenter-dark .help.is-link{color:#1abc9c}html.theme--documenter-dark .help.is-info{color:#024c7d}html.theme--documenter-dark .help.is-success{color:#008438}html.theme--documenter-dark .help.is-warning{color:#ad8100}html.theme--documenter-dark .help.is-danger{color:#9e1b0d}html.theme--documenter-dark .field:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.has-addons{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.has-addons .control:not(:last-child){margin-right:-1px}html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .button,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .button,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,html.theme--documenter-dark .field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]),html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]){z-index:3}html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .button.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .button:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .button.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark #documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):focus:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-focused:not([disabled]):hover,html.theme--documenter-dark .field.has-addons .control .select select:not([disabled]):active:hover,html.theme--documenter-dark .field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}html.theme--documenter-dark .field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.has-addons.has-addons-centered{justify-content:center}html.theme--documenter-dark .field.has-addons.has-addons-right{justify-content:flex-end}html.theme--documenter-dark .field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .field.is-grouped{display:flex;justify-content:flex-start}html.theme--documenter-dark .field.is-grouped>.control{flex-shrink:0}html.theme--documenter-dark .field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:0.75rem}html.theme--documenter-dark .field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .field.is-grouped.is-grouped-centered{justify-content:center}html.theme--documenter-dark .field.is-grouped.is-grouped-right{justify-content:flex-end}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline{flex-wrap:wrap}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:last-child,html.theme--documenter-dark .field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}html.theme--documenter-dark .field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field.is-horizontal{display:flex}}html.theme--documenter-dark .field-label .label{font-size:inherit}@media screen and (max-width: 768px){html.theme--documenter-dark .field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}html.theme--documenter-dark .field-label.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.field-label{font-size:.85em;padding-top:0.375em}html.theme--documenter-dark .field-label.is-normal{padding-top:0.375em}html.theme--documenter-dark .field-label.is-medium{font-size:1.25rem;padding-top:0.375em}html.theme--documenter-dark .field-label.is-large{font-size:1.5rem;padding-top:0.375em}}html.theme--documenter-dark .field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{html.theme--documenter-dark .field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}html.theme--documenter-dark .field-body .field{margin-bottom:0}html.theme--documenter-dark .field-body>.field{flex-shrink:1}html.theme--documenter-dark .field-body>.field:not(.is-narrow){flex-grow:1}html.theme--documenter-dark .field-body>.field:not(:last-child){margin-right:0.75rem}}html.theme--documenter-dark .control{box-sizing:border-box;clear:both;font-size:15px;position:relative;text-align:left}html.theme--documenter-dark .control.has-icons-left .input:focus~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-left .select:focus~.icon,html.theme--documenter-dark .control.has-icons-right .input:focus~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,html.theme--documenter-dark .control.has-icons-right .select:focus~.icon{color:#5e6d6f}html.theme--documenter-dark .control.has-icons-left .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-small~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-small~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-small~.icon{font-size:.85em}html.theme--documenter-dark .control.has-icons-left .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}html.theme--documenter-dark .control.has-icons-left .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-left .select.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,html.theme--documenter-dark .control.has-icons-right .select.is-large~.icon{font-size:1.5rem}html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon{color:#dbdee0;height:2.25em;pointer-events:none;position:absolute;top:0;width:2.25em;z-index:4}html.theme--documenter-dark .control.has-icons-left .input,html.theme--documenter-dark .control.has-icons-left #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-left form.docs-search>input,html.theme--documenter-dark .control.has-icons-left .select select{padding-left:2.25em}html.theme--documenter-dark .control.has-icons-left .icon.is-left{left:0}html.theme--documenter-dark .control.has-icons-right .input,html.theme--documenter-dark .control.has-icons-right #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-icons-right form.docs-search>input,html.theme--documenter-dark .control.has-icons-right .select select{padding-right:2.25em}html.theme--documenter-dark .control.has-icons-right .icon.is-right{right:0}html.theme--documenter-dark .control.is-loading::after{position:absolute !important;right:0.625em;top:0.625em;z-index:4}html.theme--documenter-dark .control.is-loading.is-small:after,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.85em}html.theme--documenter-dark .control.is-loading.is-medium:after{font-size:1.25rem}html.theme--documenter-dark .control.is-loading.is-large:after{font-size:1.5rem}html.theme--documenter-dark .breadcrumb{font-size:15px;white-space:nowrap}html.theme--documenter-dark .breadcrumb a{align-items:center;color:#1abc9c;display:flex;justify-content:center;padding:0 .75em}html.theme--documenter-dark .breadcrumb a:hover{color:#1dd2af}html.theme--documenter-dark .breadcrumb li{align-items:center;display:flex}html.theme--documenter-dark .breadcrumb li:first-child a{padding-left:0}html.theme--documenter-dark .breadcrumb li.is-active a{color:#f2f2f2;cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb li+li::before{color:#8c9b9d;content:"\0002f"}html.theme--documenter-dark .breadcrumb ul,html.theme--documenter-dark .breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}html.theme--documenter-dark .breadcrumb .icon:first-child{margin-right:0.5em}html.theme--documenter-dark .breadcrumb .icon:last-child{margin-left:0.5em}html.theme--documenter-dark .breadcrumb.is-centered ol,html.theme--documenter-dark .breadcrumb.is-centered ul{justify-content:center}html.theme--documenter-dark .breadcrumb.is-right ol,html.theme--documenter-dark .breadcrumb.is-right ul{justify-content:flex-end}html.theme--documenter-dark .breadcrumb.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.85em}html.theme--documenter-dark .breadcrumb.is-medium{font-size:1.25rem}html.theme--documenter-dark .breadcrumb.is-large{font-size:1.5rem}html.theme--documenter-dark .breadcrumb.has-arrow-separator li+li::before{content:"\02192"}html.theme--documenter-dark .breadcrumb.has-bullet-separator li+li::before{content:"\02022"}html.theme--documenter-dark .breadcrumb.has-dot-separator li+li::before{content:"\000b7"}html.theme--documenter-dark .breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}html.theme--documenter-dark .card{background-color:#fff;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#fff;max-width:100%;position:relative}html.theme--documenter-dark .card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}html.theme--documenter-dark .card-header-title{align-items:center;color:#f2f2f2;display:flex;flex-grow:1;font-weight:700;padding:.75rem}html.theme--documenter-dark .card-header-title.is-centered{justify-content:center}html.theme--documenter-dark .card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-image{display:block;position:relative}html.theme--documenter-dark .card-content{background-color:rgba(0,0,0,0);padding:1.5rem}html.theme--documenter-dark .card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #5e6d6f;align-items:stretch;display:flex}html.theme--documenter-dark .card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}html.theme--documenter-dark .card-footer-item:not(:last-child){border-right:1px solid #5e6d6f}html.theme--documenter-dark .card .media:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .dropdown{display:inline-flex;position:relative;vertical-align:top}html.theme--documenter-dark .dropdown.is-active .dropdown-menu,html.theme--documenter-dark .dropdown.is-hoverable:hover .dropdown-menu{display:block}html.theme--documenter-dark .dropdown.is-right .dropdown-menu{left:auto;right:0}html.theme--documenter-dark .dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}html.theme--documenter-dark .dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .dropdown-content{background-color:#282f2f;border-radius:.4em;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:.5rem;padding-top:.5rem}html.theme--documenter-dark .dropdown-item{color:#fff;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}html.theme--documenter-dark a.dropdown-item,html.theme--documenter-dark button.dropdown-item{padding-right:3rem;text-align:left;white-space:nowrap;width:100%}html.theme--documenter-dark a.dropdown-item:hover,html.theme--documenter-dark button.dropdown-item:hover{background-color:#282f2f;color:#0a0a0a}html.theme--documenter-dark a.dropdown-item.is-active,html.theme--documenter-dark button.dropdown-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .dropdown-divider{background-color:#5e6d6f;border:none;display:block;height:1px;margin:0.5rem 0}html.theme--documenter-dark .level{align-items:center;justify-content:space-between}html.theme--documenter-dark .level code{border-radius:.4em}html.theme--documenter-dark .level img{display:inline-block;vertical-align:top}html.theme--documenter-dark .level.is-mobile{display:flex}html.theme--documenter-dark .level.is-mobile .level-left,html.theme--documenter-dark .level.is-mobile .level-right{display:flex}html.theme--documenter-dark .level.is-mobile .level-left+.level-right{margin-top:0}html.theme--documenter-dark .level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}html.theme--documenter-dark .level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level{display:flex}html.theme--documenter-dark .level>.level-item:not(.is-narrow){flex-grow:1}}html.theme--documenter-dark .level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}html.theme--documenter-dark .level-item .title,html.theme--documenter-dark .level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){html.theme--documenter-dark .level-item:not(:last-child){margin-bottom:.75rem}}html.theme--documenter-dark .level-left,html.theme--documenter-dark .level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .level-left .level-item.is-flexible,html.theme--documenter-dark .level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left .level-item:not(:last-child),html.theme--documenter-dark .level-right .level-item:not(:last-child){margin-right:.75rem}}html.theme--documenter-dark .level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){html.theme--documenter-dark .level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-left{display:flex}}html.theme--documenter-dark .level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{html.theme--documenter-dark .level-right{display:flex}}html.theme--documenter-dark .list{background-color:#fff;border-radius:.4em;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1)}html.theme--documenter-dark .list-item{display:block;padding:0.5em 1em}html.theme--documenter-dark .list-item:not(a){color:#fff}html.theme--documenter-dark .list-item:first-child{border-top-left-radius:.4em;border-top-right-radius:.4em}html.theme--documenter-dark .list-item:last-child{border-bottom-left-radius:.4em;border-bottom-right-radius:.4em}html.theme--documenter-dark .list-item:not(:last-child){border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .list-item.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark a.list-item{background-color:#282f2f;cursor:pointer}html.theme--documenter-dark .media{align-items:flex-start;display:flex;text-align:left}html.theme--documenter-dark .media .content:not(:last-child){margin-bottom:0.75rem}html.theme--documenter-dark .media .media{border-top:1px solid rgba(94,109,111,0.5);display:flex;padding-top:0.75rem}html.theme--documenter-dark .media .media .content:not(:last-child),html.theme--documenter-dark .media .media .control:not(:last-child){margin-bottom:0.5rem}html.theme--documenter-dark .media .media .media{padding-top:0.5rem}html.theme--documenter-dark .media .media .media+.media{margin-top:0.5rem}html.theme--documenter-dark .media+.media{border-top:1px solid rgba(94,109,111,0.5);margin-top:1rem;padding-top:1rem}html.theme--documenter-dark .media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}html.theme--documenter-dark .media-left,html.theme--documenter-dark .media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .media-left{margin-right:1rem}html.theme--documenter-dark .media-right{margin-left:1rem}html.theme--documenter-dark .media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:left}@media screen and (max-width: 768px){html.theme--documenter-dark .media-content{overflow-x:auto}}html.theme--documenter-dark .menu{font-size:15px}html.theme--documenter-dark .menu.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.menu{font-size:.85em}html.theme--documenter-dark .menu.is-medium{font-size:1.25rem}html.theme--documenter-dark .menu.is-large{font-size:1.5rem}html.theme--documenter-dark .menu-list{line-height:1.25}html.theme--documenter-dark .menu-list a{border-radius:3px;color:#fff;display:block;padding:0.5em 0.75em}html.theme--documenter-dark .menu-list a:hover{background-color:#282f2f;color:#f2f2f2}html.theme--documenter-dark .menu-list a.is-active{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .menu-list li ul{border-left:1px solid #5e6d6f;margin:.75em;padding-left:.75em}html.theme--documenter-dark .menu-label{color:#fff;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}html.theme--documenter-dark .menu-label:not(:first-child){margin-top:1em}html.theme--documenter-dark .menu-label:not(:last-child){margin-bottom:1em}html.theme--documenter-dark .message{background-color:#282f2f;border-radius:.4em;font-size:15px}html.theme--documenter-dark .message strong{color:currentColor}html.theme--documenter-dark .message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}html.theme--documenter-dark .message.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.message{font-size:.85em}html.theme--documenter-dark .message.is-medium{font-size:1.25rem}html.theme--documenter-dark .message.is-large{font-size:1.5rem}html.theme--documenter-dark .message.is-white{background-color:#fff}html.theme--documenter-dark .message.is-white .message-header{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .message.is-white .message-body{border-color:#fff;color:#4d4d4d}html.theme--documenter-dark .message.is-black{background-color:#fafafa}html.theme--documenter-dark .message.is-black .message-header{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .message.is-black .message-body{border-color:#0a0a0a;color:#090909}html.theme--documenter-dark .message.is-light{background-color:#f9fafb}html.theme--documenter-dark .message.is-light .message-header{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .message.is-light .message-body{border-color:#ecf0f1;color:#505050}html.theme--documenter-dark .message.is-dark,html.theme--documenter-dark .content kbd.message{background-color:#f9fafa}html.theme--documenter-dark .message.is-dark .message-header,html.theme--documenter-dark .content kbd.message .message-header{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .message.is-dark .message-body,html.theme--documenter-dark .content kbd.message .message-body{border-color:#282f2f;color:#212526}html.theme--documenter-dark .message.is-primary,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink{background-color:#f8fafc}html.theme--documenter-dark .message.is-primary .message-header,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-header{background-color:#375a7f;color:#fff}html.theme--documenter-dark .message.is-primary .message-body,html.theme--documenter-dark .docstring>section>a.message.docs-sourcelink .message-body{border-color:#375a7f;color:#2b4159}html.theme--documenter-dark .message.is-link{background-color:#f6fefc}html.theme--documenter-dark .message.is-link .message-header{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .message.is-link .message-body{border-color:#1abc9c;color:#0b2f28}html.theme--documenter-dark .message.is-info{background-color:#f5fbff}html.theme--documenter-dark .message.is-info .message-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .message.is-info .message-body{border-color:#024c7d;color:#033659}html.theme--documenter-dark .message.is-success{background-color:#f5fff9}html.theme--documenter-dark .message.is-success .message-header{background-color:#008438;color:#fff}html.theme--documenter-dark .message.is-success .message-body{border-color:#008438;color:#023518}html.theme--documenter-dark .message.is-warning{background-color:#fffcf5}html.theme--documenter-dark .message.is-warning .message-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .message.is-warning .message-body{border-color:#ad8100;color:#3d2e03}html.theme--documenter-dark .message.is-danger{background-color:#fef6f6}html.theme--documenter-dark .message.is-danger .message-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .message.is-danger .message-body{border-color:#9e1b0d;color:#7a170c}html.theme--documenter-dark .message-header{align-items:center;background-color:#fff;border-radius:.4em .4em 0 0;color:rgba(0,0,0,0.7);display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}html.theme--documenter-dark .message-header .delete{flex-grow:0;flex-shrink:0;margin-left:0.75em}html.theme--documenter-dark .message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}html.theme--documenter-dark .message-body{border-color:#5e6d6f;border-radius:.4em;border-style:solid;border-width:0 0 0 4px;color:#fff;padding:1.25em 1.5em}html.theme--documenter-dark .message-body code,html.theme--documenter-dark .message-body pre{background-color:#fff}html.theme--documenter-dark .message-body pre code{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}html.theme--documenter-dark .modal.is-active{display:flex}html.theme--documenter-dark .modal-background{background-color:rgba(10,10,10,0.86)}html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),print{html.theme--documenter-dark .modal-content,html.theme--documenter-dark .modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}html.theme--documenter-dark .modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}html.theme--documenter-dark .modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}html.theme--documenter-dark .modal-card-head,html.theme--documenter-dark .modal-card-foot{align-items:center;background-color:#282f2f;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}html.theme--documenter-dark .modal-card-head{border-bottom:1px solid #5e6d6f;border-top-left-radius:8px;border-top-right-radius:8px}html.theme--documenter-dark .modal-card-title{color:#f2f2f2;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}html.theme--documenter-dark .modal-card-foot{border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid #5e6d6f}html.theme--documenter-dark .modal-card-foot .button:not(:last-child){margin-right:0.5em}html.theme--documenter-dark .modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}html.theme--documenter-dark .navbar{background-color:#375a7f;min-height:4rem;position:relative;z-index:30}html.theme--documenter-dark .navbar.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-white .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-white .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}html.theme--documenter-dark .navbar.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-black .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-black .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}html.theme--documenter-dark .navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}html.theme--documenter-dark .navbar.is-light{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link{color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#dde4e6;color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-brand .navbar-link::after{border-color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-burger{color:#282f2f}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-light .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link{color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-light .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link.is-active{background-color:#dde4e6;color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-light .navbar-end .navbar-link::after{border-color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#dde4e6;color:#282f2f}html.theme--documenter-dark .navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#ecf0f1;color:#282f2f}}html.theme--documenter-dark .navbar.is-dark,html.theme--documenter-dark .content kbd.navbar{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-brand>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link{color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#1d2122;color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-brand .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-brand .navbar-link::after{border-color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-burger,html.theme--documenter-dark .content kbd.navbar .navbar-burger{color:#ecf0f1}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-dark .navbar-start>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-end>.navbar-item,html.theme--documenter-dark .content kbd.navbar .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link{color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:focus,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link:hover,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#1d2122;color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-start .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-dark .navbar-end .navbar-link::after,html.theme--documenter-dark .content kbd.navbar .navbar-end .navbar-link::after{border-color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1d2122;color:#ecf0f1}html.theme--documenter-dark .navbar.is-dark .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#282f2f;color:#ecf0f1}}html.theme--documenter-dark .navbar.is-primary,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-brand .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-burger,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-primary .navbar-start>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-end>.navbar-item,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:focus,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-start .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-primary .navbar-end .navbar-link::after,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#375a7f;color:#fff}}html.theme--documenter-dark .navbar.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-link .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-link .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#17a689;color:#fff}html.theme--documenter-dark .navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c;color:#fff}}html.theme--documenter-dark .navbar.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-info .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-info .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#023d64;color:#fff}html.theme--documenter-dark .navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#024c7d;color:#fff}}html.theme--documenter-dark .navbar.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-success .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-success .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#006b2d;color:#fff}html.theme--documenter-dark .navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#008438;color:#fff}}html.theme--documenter-dark .navbar.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-warning .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-warning .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#946e00;color:#fff}html.theme--documenter-dark .navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ad8100;color:#fff}}html.theme--documenter-dark .navbar.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar.is-danger .navbar-start>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-end>.navbar-item,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link{color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end>a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:focus,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link:hover,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-start .navbar-link::after,html.theme--documenter-dark .navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#86170b;color:#fff}html.theme--documenter-dark .navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#9e1b0d;color:#fff}}html.theme--documenter-dark .navbar>.container{align-items:stretch;display:flex;min-height:4rem;width:100%}html.theme--documenter-dark .navbar.has-shadow{box-shadow:0 2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-bottom,html.theme--documenter-dark .navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #282f2f}html.theme--documenter-dark .navbar.is-fixed-top{top:0}html.theme--documenter-dark html.has-navbar-fixed-top,html.theme--documenter-dark body.has-navbar-fixed-top{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom,html.theme--documenter-dark body.has-navbar-fixed-bottom{padding-bottom:4rem}html.theme--documenter-dark .navbar-brand,html.theme--documenter-dark .navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:4rem}html.theme--documenter-dark .navbar-brand a.navbar-item:focus,html.theme--documenter-dark .navbar-brand a.navbar-item:hover{background-color:transparent}html.theme--documenter-dark .navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}html.theme--documenter-dark .navbar-burger{color:#fff;cursor:pointer;display:block;height:4rem;position:relative;width:4rem;margin-left:auto}html.theme--documenter-dark .navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}html.theme--documenter-dark .navbar-burger span:nth-child(1){top:calc(50% - 6px)}html.theme--documenter-dark .navbar-burger span:nth-child(2){top:calc(50% - 1px)}html.theme--documenter-dark .navbar-burger span:nth-child(3){top:calc(50% + 4px)}html.theme--documenter-dark .navbar-burger:hover{background-color:rgba(0,0,0,0.05)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(2){opacity:0}html.theme--documenter-dark .navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}html.theme--documenter-dark .navbar-menu{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{color:#fff;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}html.theme--documenter-dark .navbar-item .icon:only-child,html.theme--documenter-dark .navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}html.theme--documenter-dark a.navbar-item,html.theme--documenter-dark .navbar-link{cursor:pointer}html.theme--documenter-dark a.navbar-item:focus,html.theme--documenter-dark a.navbar-item:focus-within,html.theme--documenter-dark a.navbar-item:hover,html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link:focus,html.theme--documenter-dark .navbar-link:focus-within,html.theme--documenter-dark .navbar-link:hover,html.theme--documenter-dark .navbar-link.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-item{display:block;flex-grow:0;flex-shrink:0}html.theme--documenter-dark .navbar-item img{max-height:1.75rem}html.theme--documenter-dark .navbar-item.has-dropdown{padding:0}html.theme--documenter-dark .navbar-item.is-expanded{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-item.is-tab{border-bottom:1px solid transparent;min-height:4rem;padding-bottom:calc(0.5rem - 1px)}html.theme--documenter-dark .navbar-item.is-tab:focus,html.theme--documenter-dark .navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c}html.theme--documenter-dark .navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#1abc9c;border-bottom-style:solid;border-bottom-width:3px;color:#1abc9c;padding-bottom:calc(0.5rem - 3px)}html.theme--documenter-dark .navbar-content{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .navbar-link:not(.is-arrowless){padding-right:2.5em}html.theme--documenter-dark .navbar-link:not(.is-arrowless)::after{border-color:#fff;margin-top:-0.375em;right:1.125em}html.theme--documenter-dark .navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}html.theme--documenter-dark .navbar-divider{background-color:rgba(0,0,0,0.2);border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar>.container{display:block}html.theme--documenter-dark .navbar-brand .navbar-item,html.theme--documenter-dark .navbar-tabs .navbar-item{align-items:center;display:flex}html.theme--documenter-dark .navbar-link::after{display:none}html.theme--documenter-dark .navbar-menu{background-color:#375a7f;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}html.theme--documenter-dark .navbar-menu.is-active{display:block}html.theme--documenter-dark .navbar.is-fixed-bottom-touch,html.theme--documenter-dark .navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-touch{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-touch{top:0}html.theme--documenter-dark .navbar.is-fixed-top .navbar-menu,html.theme--documenter-dark .navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 4rem);overflow:auto}html.theme--documenter-dark html.has-navbar-fixed-top-touch,html.theme--documenter-dark body.has-navbar-fixed-top-touch{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-touch,html.theme--documenter-dark body.has-navbar-fixed-bottom-touch{padding-bottom:4rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .navbar,html.theme--documenter-dark .navbar-menu,html.theme--documenter-dark .navbar-start,html.theme--documenter-dark .navbar-end{align-items:stretch;display:flex}html.theme--documenter-dark .navbar{min-height:4rem}html.theme--documenter-dark .navbar.is-spaced{padding:1rem 2rem}html.theme--documenter-dark .navbar.is-spaced .navbar-start,html.theme--documenter-dark .navbar.is-spaced .navbar-end{align-items:center}html.theme--documenter-dark .navbar.is-spaced a.navbar-item,html.theme--documenter-dark .navbar.is-spaced .navbar-link{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent a.navbar-item:hover,html.theme--documenter-dark .navbar.is-transparent a.navbar-item.is-active,html.theme--documenter-dark .navbar.is-transparent .navbar-link:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-link:hover,html.theme--documenter-dark .navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,html.theme--documenter-dark .navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}html.theme--documenter-dark .navbar-burger{display:none}html.theme--documenter-dark .navbar-item,html.theme--documenter-dark .navbar-link{align-items:center;display:flex}html.theme--documenter-dark .navbar-item{display:flex}html.theme--documenter-dark .navbar-item.has-dropdown{align-items:stretch}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}html.theme--documenter-dark .navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:1px solid rgba(0,0,0,0.2);border-radius:8px 8px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown,html.theme--documenter-dark .navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}html.theme--documenter-dark .navbar-menu{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .navbar-start{justify-content:flex-start;margin-right:auto}html.theme--documenter-dark .navbar-end{justify-content:flex-end;margin-left:auto}html.theme--documenter-dark .navbar-dropdown{background-color:#375a7f;border-bottom-left-radius:8px;border-bottom-right-radius:8px;border-top:1px solid rgba(0,0,0,0.2);box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}html.theme--documenter-dark .navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}html.theme--documenter-dark .navbar-dropdown a.navbar-item{padding-right:3rem}html.theme--documenter-dark .navbar-dropdown a.navbar-item:focus,html.theme--documenter-dark .navbar-dropdown a.navbar-item:hover{background-color:rgba(0,0,0,0);color:#dbdee0}html.theme--documenter-dark .navbar-dropdown a.navbar-item.is-active{background-color:rgba(0,0,0,0);color:#1abc9c}.navbar.is-spaced html.theme--documenter-dark .navbar-dropdown,html.theme--documenter-dark .navbar-dropdown.is-boxed{border-radius:8px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}html.theme--documenter-dark .navbar-dropdown.is-right{left:auto;right:0}html.theme--documenter-dark .navbar-divider{display:block}html.theme--documenter-dark .navbar>.container .navbar-brand,html.theme--documenter-dark .container>.navbar .navbar-brand{margin-left:-.75rem}html.theme--documenter-dark .navbar>.container .navbar-menu,html.theme--documenter-dark .container>.navbar .navbar-menu{margin-right:-.75rem}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop,html.theme--documenter-dark .navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop{bottom:0}html.theme--documenter-dark .navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}html.theme--documenter-dark .navbar.is-fixed-top-desktop{top:0}html.theme--documenter-dark html.has-navbar-fixed-top-desktop,html.theme--documenter-dark body.has-navbar-fixed-top-desktop{padding-top:4rem}html.theme--documenter-dark html.has-navbar-fixed-bottom-desktop,html.theme--documenter-dark body.has-navbar-fixed-bottom-desktop{padding-bottom:4rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-top,html.theme--documenter-dark body.has-spaced-navbar-fixed-top{padding-top:6rem}html.theme--documenter-dark html.has-spaced-navbar-fixed-bottom,html.theme--documenter-dark body.has-spaced-navbar-fixed-bottom{padding-bottom:6rem}html.theme--documenter-dark a.navbar-item.is-active,html.theme--documenter-dark .navbar-link.is-active{color:#1abc9c}html.theme--documenter-dark a.navbar-item.is-active:not(:focus):not(:hover),html.theme--documenter-dark .navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}html.theme--documenter-dark .navbar-item.has-dropdown:focus .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown:hover .navbar-link,html.theme--documenter-dark .navbar-item.has-dropdown.is-active .navbar-link{background-color:rgba(0,0,0,0)}}html.theme--documenter-dark .hero.is-fullheight-with-navbar{min-height:calc(100vh - 4rem)}html.theme--documenter-dark .pagination{font-size:15px;margin:-.25rem}html.theme--documenter-dark .pagination.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination{font-size:.85em}html.theme--documenter-dark .pagination.is-medium{font-size:1.25rem}html.theme--documenter-dark .pagination.is-large{font-size:1.5rem}html.theme--documenter-dark .pagination.is-rounded .pagination-previous,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,html.theme--documenter-dark .pagination.is-rounded .pagination-next,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:290486px}html.theme--documenter-dark .pagination.is-rounded .pagination-link,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:290486px}html.theme--documenter-dark .pagination,html.theme--documenter-dark .pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-link{border-color:#5e6d6f;color:#1abc9c;min-width:2.25em}html.theme--documenter-dark .pagination-previous:hover,html.theme--documenter-dark .pagination-next:hover,html.theme--documenter-dark .pagination-link:hover{border-color:#8c9b9d;color:#1dd2af}html.theme--documenter-dark .pagination-previous:focus,html.theme--documenter-dark .pagination-next:focus,html.theme--documenter-dark .pagination-link:focus{border-color:#8c9b9d}html.theme--documenter-dark .pagination-previous:active,html.theme--documenter-dark .pagination-next:active,html.theme--documenter-dark .pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}html.theme--documenter-dark .pagination-previous[disabled],html.theme--documenter-dark .pagination-next[disabled],html.theme--documenter-dark .pagination-link[disabled]{background-color:#dbdee0;border-color:#dbdee0;box-shadow:none;color:#5e6d6f;opacity:0.5}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{padding-left:0.75em;padding-right:0.75em;white-space:nowrap}html.theme--documenter-dark .pagination-link.is-current{background-color:#1abc9c;border-color:#1abc9c;color:#fff}html.theme--documenter-dark .pagination-ellipsis{color:#8c9b9d;pointer-events:none}html.theme--documenter-dark .pagination-list{flex-wrap:wrap}@media screen and (max-width: 768px){html.theme--documenter-dark .pagination{flex-wrap:wrap}html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .pagination-next{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}html.theme--documenter-dark .pagination-previous{order:2}html.theme--documenter-dark .pagination-next{order:3}html.theme--documenter-dark .pagination{justify-content:space-between}html.theme--documenter-dark .pagination.is-centered .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-centered .pagination-list{justify-content:center;order:2}html.theme--documenter-dark .pagination.is-centered .pagination-next{order:3}html.theme--documenter-dark .pagination.is-right .pagination-previous{order:1}html.theme--documenter-dark .pagination.is-right .pagination-next{order:2}html.theme--documenter-dark .pagination.is-right .pagination-list{justify-content:flex-end;order:3}}html.theme--documenter-dark .panel{font-size:15px}html.theme--documenter-dark .panel:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs,html.theme--documenter-dark .panel-block{border-bottom:1px solid #5e6d6f;border-left:1px solid #5e6d6f;border-right:1px solid #5e6d6f}html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child,html.theme--documenter-dark .panel-block:first-child{border-top:1px solid #5e6d6f}html.theme--documenter-dark .panel-heading{background-color:#282f2f;border-radius:.4em .4em 0 0;color:#f2f2f2;font-size:1.25em;font-weight:300;line-height:1.25;padding:0.5em 0.75em}html.theme--documenter-dark .panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}html.theme--documenter-dark .panel-tabs a{border-bottom:1px solid #5e6d6f;margin-bottom:-1px;padding:0.5em}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#343c3d;color:#17a689}html.theme--documenter-dark .panel-list a{color:#fff}html.theme--documenter-dark .panel-list a:hover{color:#1abc9c}html.theme--documenter-dark .panel-block{align-items:center;color:#f2f2f2;display:flex;justify-content:flex-start;padding:0.5em 0.75em}html.theme--documenter-dark .panel-block input[type="checkbox"]{margin-right:0.75em}html.theme--documenter-dark .panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}html.theme--documenter-dark .panel-block.is-wrapped{flex-wrap:wrap}html.theme--documenter-dark .panel-block.is-active{border-left-color:#1abc9c;color:#17a689}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#1abc9c}html.theme--documenter-dark a.panel-block,html.theme--documenter-dark label.panel-block{cursor:pointer}html.theme--documenter-dark a.panel-block:hover,html.theme--documenter-dark label.panel-block:hover{background-color:#282f2f}html.theme--documenter-dark .panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#fff;margin-right:0.75em}html.theme--documenter-dark .panel-icon .fa{font-size:inherit;line-height:inherit}html.theme--documenter-dark .tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:15px;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}html.theme--documenter-dark .tabs a{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;color:#fff;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}html.theme--documenter-dark .tabs a:hover{border-bottom-color:#f2f2f2;color:#f2f2f2}html.theme--documenter-dark .tabs li{display:block}html.theme--documenter-dark .tabs li.is-active a{border-bottom-color:#1abc9c;color:#1abc9c}html.theme--documenter-dark .tabs ul{align-items:center;border-bottom-color:#5e6d6f;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}html.theme--documenter-dark .tabs ul.is-left{padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}html.theme--documenter-dark .tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}html.theme--documenter-dark .tabs .icon:first-child{margin-right:0.5em}html.theme--documenter-dark .tabs .icon:last-child{margin-left:0.5em}html.theme--documenter-dark .tabs.is-centered ul{justify-content:center}html.theme--documenter-dark .tabs.is-right ul{justify-content:flex-end}html.theme--documenter-dark .tabs.is-boxed a{border:1px solid transparent;border-radius:.4em .4em 0 0}html.theme--documenter-dark .tabs.is-boxed a:hover{background-color:#282f2f;border-bottom-color:#5e6d6f}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#fff;border-color:#5e6d6f;border-bottom-color:rgba(0,0,0,0) !important}html.theme--documenter-dark .tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}html.theme--documenter-dark .tabs.is-toggle a{border-color:#5e6d6f;border-style:solid;border-width:1px;margin-bottom:0;position:relative}html.theme--documenter-dark .tabs.is-toggle a:hover{background-color:#282f2f;border-color:#8c9b9d;z-index:2}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .tabs.is-toggle li:first-child a{border-radius:.4em 0 0 .4em}html.theme--documenter-dark .tabs.is-toggle li:last-child a{border-radius:0 .4em .4em 0}html.theme--documenter-dark .tabs.is-toggle li.is-active a{background-color:#1abc9c;border-color:#1abc9c;color:#fff;z-index:1}html.theme--documenter-dark .tabs.is-toggle ul{border-bottom:none}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}html.theme--documenter-dark .tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}html.theme--documenter-dark .tabs.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.tabs{font-size:.85em}html.theme--documenter-dark .tabs.is-medium{font-size:1.25rem}html.theme--documenter-dark .tabs.is-large{font-size:1.5rem}html.theme--documenter-dark .column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>html.theme--documenter-dark .column.is-narrow{flex:none}.columns.is-mobile>html.theme--documenter-dark .column.is-full{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-half{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-half{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>html.theme--documenter-dark .column.is-0{flex:none;width:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-0{margin-left:0%}.columns.is-mobile>html.theme--documenter-dark .column.is-1{flex:none;width:8.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-1{margin-left:8.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-2{flex:none;width:16.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-2{margin-left:16.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-3{flex:none;width:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-3{margin-left:25%}.columns.is-mobile>html.theme--documenter-dark .column.is-4{flex:none;width:33.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-4{margin-left:33.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-5{flex:none;width:41.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-5{margin-left:41.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-6{flex:none;width:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-6{margin-left:50%}.columns.is-mobile>html.theme--documenter-dark .column.is-7{flex:none;width:58.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-7{margin-left:58.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-8{flex:none;width:66.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-8{margin-left:66.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-9{flex:none;width:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-9{margin-left:75%}.columns.is-mobile>html.theme--documenter-dark .column.is-10{flex:none;width:83.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-10{margin-left:83.3333333333%}.columns.is-mobile>html.theme--documenter-dark .column.is-11{flex:none;width:91.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-11{margin-left:91.6666666667%}.columns.is-mobile>html.theme--documenter-dark .column.is-12{flex:none;width:100%}.columns.is-mobile>html.theme--documenter-dark .column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){html.theme--documenter-dark .column.is-narrow-mobile{flex:none}html.theme--documenter-dark .column.is-full-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-mobile{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-mobile{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-mobile{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-mobile{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-mobile{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-mobile{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-mobile{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-mobile{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-mobile{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-mobile{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-mobile{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-mobile{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-mobile{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-mobile{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-mobile{margin-left:80%}html.theme--documenter-dark .column.is-0-mobile{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-mobile{margin-left:0%}html.theme--documenter-dark .column.is-1-mobile{flex:none;width:8.3333333333%}html.theme--documenter-dark .column.is-offset-1-mobile{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-mobile{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-mobile{margin-left:16.6666666667%}html.theme--documenter-dark .column.is-3-mobile{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-mobile{margin-left:25%}html.theme--documenter-dark .column.is-4-mobile{flex:none;width:33.3333333333%}html.theme--documenter-dark .column.is-offset-4-mobile{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-mobile{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-mobile{margin-left:41.6666666667%}html.theme--documenter-dark .column.is-6-mobile{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-mobile{margin-left:50%}html.theme--documenter-dark .column.is-7-mobile{flex:none;width:58.3333333333%}html.theme--documenter-dark .column.is-offset-7-mobile{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-mobile{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-mobile{margin-left:66.6666666667%}html.theme--documenter-dark .column.is-9-mobile{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-mobile{margin-left:75%}html.theme--documenter-dark .column.is-10-mobile{flex:none;width:83.3333333333%}html.theme--documenter-dark .column.is-offset-10-mobile{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-mobile{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-mobile{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12-mobile{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .column.is-narrow,html.theme--documenter-dark .column.is-narrow-tablet{flex:none}html.theme--documenter-dark .column.is-full,html.theme--documenter-dark .column.is-full-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters,html.theme--documenter-dark .column.is-three-quarters-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds,html.theme--documenter-dark .column.is-two-thirds-tablet{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half,html.theme--documenter-dark .column.is-half-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third,html.theme--documenter-dark .column.is-one-third-tablet{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter,html.theme--documenter-dark .column.is-one-quarter-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth,html.theme--documenter-dark .column.is-one-fifth-tablet{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths,html.theme--documenter-dark .column.is-two-fifths-tablet{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths,html.theme--documenter-dark .column.is-three-fifths-tablet{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths,html.theme--documenter-dark .column.is-four-fifths-tablet{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters,html.theme--documenter-dark .column.is-offset-three-quarters-tablet{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds,html.theme--documenter-dark .column.is-offset-two-thirds-tablet{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half,html.theme--documenter-dark .column.is-offset-half-tablet{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third,html.theme--documenter-dark .column.is-offset-one-third-tablet{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter,html.theme--documenter-dark .column.is-offset-one-quarter-tablet{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth,html.theme--documenter-dark .column.is-offset-one-fifth-tablet{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths,html.theme--documenter-dark .column.is-offset-two-fifths-tablet{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths,html.theme--documenter-dark .column.is-offset-three-fifths-tablet{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths,html.theme--documenter-dark .column.is-offset-four-fifths-tablet{margin-left:80%}html.theme--documenter-dark .column.is-0,html.theme--documenter-dark .column.is-0-tablet{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0,html.theme--documenter-dark .column.is-offset-0-tablet{margin-left:0%}html.theme--documenter-dark .column.is-1,html.theme--documenter-dark .column.is-1-tablet{flex:none;width:8.3333333333%}html.theme--documenter-dark .column.is-offset-1,html.theme--documenter-dark .column.is-offset-1-tablet{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2,html.theme--documenter-dark .column.is-2-tablet{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2,html.theme--documenter-dark .column.is-offset-2-tablet{margin-left:16.6666666667%}html.theme--documenter-dark .column.is-3,html.theme--documenter-dark .column.is-3-tablet{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3,html.theme--documenter-dark .column.is-offset-3-tablet{margin-left:25%}html.theme--documenter-dark .column.is-4,html.theme--documenter-dark .column.is-4-tablet{flex:none;width:33.3333333333%}html.theme--documenter-dark .column.is-offset-4,html.theme--documenter-dark .column.is-offset-4-tablet{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5,html.theme--documenter-dark .column.is-5-tablet{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5,html.theme--documenter-dark .column.is-offset-5-tablet{margin-left:41.6666666667%}html.theme--documenter-dark .column.is-6,html.theme--documenter-dark .column.is-6-tablet{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6,html.theme--documenter-dark .column.is-offset-6-tablet{margin-left:50%}html.theme--documenter-dark .column.is-7,html.theme--documenter-dark .column.is-7-tablet{flex:none;width:58.3333333333%}html.theme--documenter-dark .column.is-offset-7,html.theme--documenter-dark .column.is-offset-7-tablet{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8,html.theme--documenter-dark .column.is-8-tablet{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8,html.theme--documenter-dark .column.is-offset-8-tablet{margin-left:66.6666666667%}html.theme--documenter-dark .column.is-9,html.theme--documenter-dark .column.is-9-tablet{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9,html.theme--documenter-dark .column.is-offset-9-tablet{margin-left:75%}html.theme--documenter-dark .column.is-10,html.theme--documenter-dark .column.is-10-tablet{flex:none;width:83.3333333333%}html.theme--documenter-dark .column.is-offset-10,html.theme--documenter-dark .column.is-offset-10-tablet{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11,html.theme--documenter-dark .column.is-11-tablet{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11,html.theme--documenter-dark .column.is-offset-11-tablet{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12,html.theme--documenter-dark .column.is-12-tablet{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12,html.theme--documenter-dark .column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){html.theme--documenter-dark .column.is-narrow-touch{flex:none}html.theme--documenter-dark .column.is-full-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-touch{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-touch{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-touch{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-touch{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-touch{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-touch{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-touch{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-touch{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-touch{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-touch{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-touch{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-touch{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-touch{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-touch{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-touch{margin-left:80%}html.theme--documenter-dark .column.is-0-touch{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-touch{margin-left:0%}html.theme--documenter-dark .column.is-1-touch{flex:none;width:8.3333333333%}html.theme--documenter-dark .column.is-offset-1-touch{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-touch{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-touch{margin-left:16.6666666667%}html.theme--documenter-dark .column.is-3-touch{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-touch{margin-left:25%}html.theme--documenter-dark .column.is-4-touch{flex:none;width:33.3333333333%}html.theme--documenter-dark .column.is-offset-4-touch{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-touch{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-touch{margin-left:41.6666666667%}html.theme--documenter-dark .column.is-6-touch{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-touch{margin-left:50%}html.theme--documenter-dark .column.is-7-touch{flex:none;width:58.3333333333%}html.theme--documenter-dark .column.is-offset-7-touch{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-touch{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-touch{margin-left:66.6666666667%}html.theme--documenter-dark .column.is-9-touch{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-touch{margin-left:75%}html.theme--documenter-dark .column.is-10-touch{flex:none;width:83.3333333333%}html.theme--documenter-dark .column.is-offset-10-touch{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-touch{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-touch{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12-touch{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){html.theme--documenter-dark .column.is-narrow-desktop{flex:none}html.theme--documenter-dark .column.is-full-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-desktop{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-desktop{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-desktop{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-desktop{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-desktop{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-desktop{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-desktop{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-desktop{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-desktop{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-desktop{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-desktop{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-desktop{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-desktop{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-desktop{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-desktop{margin-left:80%}html.theme--documenter-dark .column.is-0-desktop{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-desktop{margin-left:0%}html.theme--documenter-dark .column.is-1-desktop{flex:none;width:8.3333333333%}html.theme--documenter-dark .column.is-offset-1-desktop{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-desktop{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-desktop{margin-left:16.6666666667%}html.theme--documenter-dark .column.is-3-desktop{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-desktop{margin-left:25%}html.theme--documenter-dark .column.is-4-desktop{flex:none;width:33.3333333333%}html.theme--documenter-dark .column.is-offset-4-desktop{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-desktop{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-desktop{margin-left:41.6666666667%}html.theme--documenter-dark .column.is-6-desktop{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-desktop{margin-left:50%}html.theme--documenter-dark .column.is-7-desktop{flex:none;width:58.3333333333%}html.theme--documenter-dark .column.is-offset-7-desktop{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-desktop{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-desktop{margin-left:66.6666666667%}html.theme--documenter-dark .column.is-9-desktop{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-desktop{margin-left:75%}html.theme--documenter-dark .column.is-10-desktop{flex:none;width:83.3333333333%}html.theme--documenter-dark .column.is-offset-10-desktop{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-desktop{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-desktop{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12-desktop{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){html.theme--documenter-dark .column.is-narrow-widescreen{flex:none}html.theme--documenter-dark .column.is-full-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-widescreen{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-widescreen{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-widescreen{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-widescreen{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-widescreen{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-widescreen{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-widescreen{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-widescreen{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-widescreen{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-widescreen{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-widescreen{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-widescreen{margin-left:80%}html.theme--documenter-dark .column.is-0-widescreen{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-widescreen{margin-left:0%}html.theme--documenter-dark .column.is-1-widescreen{flex:none;width:8.3333333333%}html.theme--documenter-dark .column.is-offset-1-widescreen{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-widescreen{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-widescreen{margin-left:16.6666666667%}html.theme--documenter-dark .column.is-3-widescreen{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-widescreen{margin-left:25%}html.theme--documenter-dark .column.is-4-widescreen{flex:none;width:33.3333333333%}html.theme--documenter-dark .column.is-offset-4-widescreen{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-widescreen{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-widescreen{margin-left:41.6666666667%}html.theme--documenter-dark .column.is-6-widescreen{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-widescreen{margin-left:50%}html.theme--documenter-dark .column.is-7-widescreen{flex:none;width:58.3333333333%}html.theme--documenter-dark .column.is-offset-7-widescreen{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-widescreen{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-widescreen{margin-left:66.6666666667%}html.theme--documenter-dark .column.is-9-widescreen{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-widescreen{margin-left:75%}html.theme--documenter-dark .column.is-10-widescreen{flex:none;width:83.3333333333%}html.theme--documenter-dark .column.is-offset-10-widescreen{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-widescreen{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-widescreen{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12-widescreen{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){html.theme--documenter-dark .column.is-narrow-fullhd{flex:none}html.theme--documenter-dark .column.is-full-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-three-quarters-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-two-thirds-fullhd{flex:none;width:66.6666%}html.theme--documenter-dark .column.is-half-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-one-third-fullhd{flex:none;width:33.3333%}html.theme--documenter-dark .column.is-one-quarter-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-one-fifth-fullhd{flex:none;width:20%}html.theme--documenter-dark .column.is-two-fifths-fullhd{flex:none;width:40%}html.theme--documenter-dark .column.is-three-fifths-fullhd{flex:none;width:60%}html.theme--documenter-dark .column.is-four-fifths-fullhd{flex:none;width:80%}html.theme--documenter-dark .column.is-offset-three-quarters-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-offset-two-thirds-fullhd{margin-left:66.6666%}html.theme--documenter-dark .column.is-offset-half-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-offset-one-third-fullhd{margin-left:33.3333%}html.theme--documenter-dark .column.is-offset-one-quarter-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-offset-one-fifth-fullhd{margin-left:20%}html.theme--documenter-dark .column.is-offset-two-fifths-fullhd{margin-left:40%}html.theme--documenter-dark .column.is-offset-three-fifths-fullhd{margin-left:60%}html.theme--documenter-dark .column.is-offset-four-fifths-fullhd{margin-left:80%}html.theme--documenter-dark .column.is-0-fullhd{flex:none;width:0%}html.theme--documenter-dark .column.is-offset-0-fullhd{margin-left:0%}html.theme--documenter-dark .column.is-1-fullhd{flex:none;width:8.3333333333%}html.theme--documenter-dark .column.is-offset-1-fullhd{margin-left:8.3333333333%}html.theme--documenter-dark .column.is-2-fullhd{flex:none;width:16.6666666667%}html.theme--documenter-dark .column.is-offset-2-fullhd{margin-left:16.6666666667%}html.theme--documenter-dark .column.is-3-fullhd{flex:none;width:25%}html.theme--documenter-dark .column.is-offset-3-fullhd{margin-left:25%}html.theme--documenter-dark .column.is-4-fullhd{flex:none;width:33.3333333333%}html.theme--documenter-dark .column.is-offset-4-fullhd{margin-left:33.3333333333%}html.theme--documenter-dark .column.is-5-fullhd{flex:none;width:41.6666666667%}html.theme--documenter-dark .column.is-offset-5-fullhd{margin-left:41.6666666667%}html.theme--documenter-dark .column.is-6-fullhd{flex:none;width:50%}html.theme--documenter-dark .column.is-offset-6-fullhd{margin-left:50%}html.theme--documenter-dark .column.is-7-fullhd{flex:none;width:58.3333333333%}html.theme--documenter-dark .column.is-offset-7-fullhd{margin-left:58.3333333333%}html.theme--documenter-dark .column.is-8-fullhd{flex:none;width:66.6666666667%}html.theme--documenter-dark .column.is-offset-8-fullhd{margin-left:66.6666666667%}html.theme--documenter-dark .column.is-9-fullhd{flex:none;width:75%}html.theme--documenter-dark .column.is-offset-9-fullhd{margin-left:75%}html.theme--documenter-dark .column.is-10-fullhd{flex:none;width:83.3333333333%}html.theme--documenter-dark .column.is-offset-10-fullhd{margin-left:83.3333333333%}html.theme--documenter-dark .column.is-11-fullhd{flex:none;width:91.6666666667%}html.theme--documenter-dark .column.is-offset-11-fullhd{margin-left:91.6666666667%}html.theme--documenter-dark .column.is-12-fullhd{flex:none;width:100%}html.theme--documenter-dark .column.is-offset-12-fullhd{margin-left:100%}}html.theme--documenter-dark .columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .columns:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}html.theme--documenter-dark .columns.is-centered{justify-content:center}html.theme--documenter-dark .columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}html.theme--documenter-dark .columns.is-gapless>.column{margin:0;padding:0 !important}html.theme--documenter-dark .columns.is-gapless:not(:last-child){margin-bottom:1.5rem}html.theme--documenter-dark .columns.is-gapless:last-child{margin-bottom:0}html.theme--documenter-dark .columns.is-mobile{display:flex}html.theme--documenter-dark .columns.is-multiline{flex-wrap:wrap}html.theme--documenter-dark .columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-desktop{display:flex}}html.theme--documenter-dark .columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}html.theme--documenter-dark .columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}html.theme--documenter-dark .columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-0-fullhd{--columnGap: 0rem}}html.theme--documenter-dark .columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-1-fullhd{--columnGap: .25rem}}html.theme--documenter-dark .columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-2-fullhd{--columnGap: .5rem}}html.theme--documenter-dark .columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-3-fullhd{--columnGap: .75rem}}html.theme--documenter-dark .columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-4-fullhd{--columnGap: 1rem}}html.theme--documenter-dark .columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}html.theme--documenter-dark .columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}html.theme--documenter-dark .columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}html.theme--documenter-dark .columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){html.theme--documenter-dark .columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark .columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){html.theme--documenter-dark .columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){html.theme--documenter-dark .columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){html.theme--documenter-dark .columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){html.theme--documenter-dark .columns.is-variable.is-8-fullhd{--columnGap: 2rem}}html.theme--documenter-dark .tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}html.theme--documenter-dark .tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}html.theme--documenter-dark .tile.is-ancestor:last-child{margin-bottom:-.75rem}html.theme--documenter-dark .tile.is-ancestor:not(:last-child){margin-bottom:.75rem}html.theme--documenter-dark .tile.is-child{margin:0 !important}html.theme--documenter-dark .tile.is-parent{padding:.75rem}html.theme--documenter-dark .tile.is-vertical{flex-direction:column}html.theme--documenter-dark .tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{html.theme--documenter-dark .tile:not(.is-child){display:flex}html.theme--documenter-dark .tile.is-1{flex:none;width:8.3333333333%}html.theme--documenter-dark .tile.is-2{flex:none;width:16.6666666667%}html.theme--documenter-dark .tile.is-3{flex:none;width:25%}html.theme--documenter-dark .tile.is-4{flex:none;width:33.3333333333%}html.theme--documenter-dark .tile.is-5{flex:none;width:41.6666666667%}html.theme--documenter-dark .tile.is-6{flex:none;width:50%}html.theme--documenter-dark .tile.is-7{flex:none;width:58.3333333333%}html.theme--documenter-dark .tile.is-8{flex:none;width:66.6666666667%}html.theme--documenter-dark .tile.is-9{flex:none;width:75%}html.theme--documenter-dark .tile.is-10{flex:none;width:83.3333333333%}html.theme--documenter-dark .tile.is-11{flex:none;width:91.6666666667%}html.theme--documenter-dark .tile.is-12{flex:none;width:100%}}html.theme--documenter-dark .hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}html.theme--documenter-dark .hero .navbar{background:none}html.theme--documenter-dark .hero .tabs ul{border-bottom:none}html.theme--documenter-dark .hero.is-white{background-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-white strong{color:inherit}html.theme--documenter-dark .hero.is-white .title{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .subtitle{color:rgba(10,10,10,0.9)}html.theme--documenter-dark .hero.is-white .subtitle a:not(.button),html.theme--documenter-dark .hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-white .navbar-menu{background-color:#fff}}html.theme--documenter-dark .hero.is-white .navbar-item,html.theme--documenter-dark .hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}html.theme--documenter-dark .hero.is-white a.navbar-item:hover,html.theme--documenter-dark .hero.is-white a.navbar-item.is-active,html.theme--documenter-dark .hero.is-white .navbar-link:hover,html.theme--documenter-dark .hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}html.theme--documenter-dark .hero.is-white .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-white .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a{color:#0a0a0a}html.theme--documenter-dark .hero.is-white .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}html.theme--documenter-dark .hero.is-black{background-color:#0a0a0a;color:#fff}html.theme--documenter-dark .hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-black strong{color:inherit}html.theme--documenter-dark .hero.is-black .title{color:#fff}html.theme--documenter-dark .hero.is-black .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-black .subtitle a:not(.button),html.theme--documenter-dark .hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-black .navbar-menu{background-color:#0a0a0a}}html.theme--documenter-dark .hero.is-black .navbar-item,html.theme--documenter-dark .hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-black a.navbar-item:hover,html.theme--documenter-dark .hero.is-black a.navbar-item.is-active,html.theme--documenter-dark .hero.is-black .navbar-link:hover,html.theme--documenter-dark .hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}html.theme--documenter-dark .hero.is-black .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-black .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-black .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-black .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}html.theme--documenter-dark .hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}html.theme--documenter-dark .hero.is-light{background-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-light strong{color:inherit}html.theme--documenter-dark .hero.is-light .title{color:#282f2f}html.theme--documenter-dark .hero.is-light .subtitle{color:rgba(40,47,47,0.9)}html.theme--documenter-dark .hero.is-light .subtitle a:not(.button),html.theme--documenter-dark .hero.is-light .subtitle strong{color:#282f2f}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-light .navbar-menu{background-color:#ecf0f1}}html.theme--documenter-dark .hero.is-light .navbar-item,html.theme--documenter-dark .hero.is-light .navbar-link{color:rgba(40,47,47,0.7)}html.theme--documenter-dark .hero.is-light a.navbar-item:hover,html.theme--documenter-dark .hero.is-light a.navbar-item.is-active,html.theme--documenter-dark .hero.is-light .navbar-link:hover,html.theme--documenter-dark .hero.is-light .navbar-link.is-active{background-color:#dde4e6;color:#282f2f}html.theme--documenter-dark .hero.is-light .tabs a{color:#282f2f;opacity:0.9}html.theme--documenter-dark .hero.is-light .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-light .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a{color:#282f2f}html.theme--documenter-dark .hero.is-light .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:#282f2f;border-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .hero.is-light.is-bold{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #cadfe0 0%, #ecf0f1 71%, #fafbfc 100%)}}html.theme--documenter-dark .hero.is-dark,html.theme--documenter-dark .content kbd.hero{background-color:#282f2f;color:#ecf0f1}html.theme--documenter-dark .hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-dark strong,html.theme--documenter-dark .content kbd.hero strong{color:inherit}html.theme--documenter-dark .hero.is-dark .title,html.theme--documenter-dark .content kbd.hero .title{color:#ecf0f1}html.theme--documenter-dark .hero.is-dark .subtitle,html.theme--documenter-dark .content kbd.hero .subtitle{color:rgba(236,240,241,0.9)}html.theme--documenter-dark .hero.is-dark .subtitle a:not(.button),html.theme--documenter-dark .content kbd.hero .subtitle a:not(.button),html.theme--documenter-dark .hero.is-dark .subtitle strong,html.theme--documenter-dark .content kbd.hero .subtitle strong{color:#ecf0f1}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-dark .navbar-menu,html.theme--documenter-dark .content kbd.hero .navbar-menu{background-color:#282f2f}}html.theme--documenter-dark .hero.is-dark .navbar-item,html.theme--documenter-dark .content kbd.hero .navbar-item,html.theme--documenter-dark .hero.is-dark .navbar-link,html.theme--documenter-dark .content kbd.hero .navbar-link{color:rgba(236,240,241,0.7)}html.theme--documenter-dark .hero.is-dark a.navbar-item:hover,html.theme--documenter-dark .content kbd.hero a.navbar-item:hover,html.theme--documenter-dark .hero.is-dark a.navbar-item.is-active,html.theme--documenter-dark .content kbd.hero a.navbar-item.is-active,html.theme--documenter-dark .hero.is-dark .navbar-link:hover,html.theme--documenter-dark .content kbd.hero .navbar-link:hover,html.theme--documenter-dark .hero.is-dark .navbar-link.is-active,html.theme--documenter-dark .content kbd.hero .navbar-link.is-active{background-color:#1d2122;color:#ecf0f1}html.theme--documenter-dark .hero.is-dark .tabs a,html.theme--documenter-dark .content kbd.hero .tabs a{color:#ecf0f1;opacity:0.9}html.theme--documenter-dark .hero.is-dark .tabs a:hover,html.theme--documenter-dark .content kbd.hero .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a{color:#ecf0f1}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle a:hover,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a,html.theme--documenter-dark .content kbd.hero .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#ecf0f1;border-color:#ecf0f1;color:#282f2f}html.theme--documenter-dark .hero.is-dark.is-bold,html.theme--documenter-dark .content kbd.hero.is-bold{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-dark.is-bold .navbar-menu,html.theme--documenter-dark .content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0f1615 0%, #282f2f 71%, #313c40 100%)}}html.theme--documenter-dark .hero.is-primary,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink{background-color:#375a7f;color:#fff}html.theme--documenter-dark .hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-primary strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink strong{color:inherit}html.theme--documenter-dark .hero.is-primary .title,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .title{color:#fff}html.theme--documenter-dark .hero.is-primary .subtitle,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-primary .subtitle a:not(.button),html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),html.theme--documenter-dark .hero.is-primary .subtitle strong,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-primary .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#375a7f}}html.theme--documenter-dark .hero.is-primary .navbar-item,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-item,html.theme--documenter-dark .hero.is-primary .navbar-link,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-primary a.navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,html.theme--documenter-dark .hero.is-primary a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,html.theme--documenter-dark .hero.is-primary .navbar-link:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link:hover,html.theme--documenter-dark .hero.is-primary .navbar-link.is-active,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#2f4d6d;color:#fff}html.theme--documenter-dark .hero.is-primary .tabs a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-primary .tabs a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle a:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#375a7f}html.theme--documenter-dark .hero.is-primary.is-bold,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-primary.is-bold .navbar-menu,html.theme--documenter-dark .docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #214b62 0%, #375a7f 71%, #3a5796 100%)}}html.theme--documenter-dark .hero.is-link{background-color:#1abc9c;color:#fff}html.theme--documenter-dark .hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-link strong{color:inherit}html.theme--documenter-dark .hero.is-link .title{color:#fff}html.theme--documenter-dark .hero.is-link .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-link .subtitle a:not(.button),html.theme--documenter-dark .hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-link .navbar-menu{background-color:#1abc9c}}html.theme--documenter-dark .hero.is-link .navbar-item,html.theme--documenter-dark .hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-link a.navbar-item:hover,html.theme--documenter-dark .hero.is-link a.navbar-item.is-active,html.theme--documenter-dark .hero.is-link .navbar-link:hover,html.theme--documenter-dark .hero.is-link .navbar-link.is-active{background-color:#17a689;color:#fff}html.theme--documenter-dark .hero.is-link .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-link .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-link .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-link .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#1abc9c}html.theme--documenter-dark .hero.is-link.is-bold{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #0c9764 0%, #1abc9c 71%, #17d8d2 100%)}}html.theme--documenter-dark .hero.is-info{background-color:#024c7d;color:#fff}html.theme--documenter-dark .hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-info strong{color:inherit}html.theme--documenter-dark .hero.is-info .title{color:#fff}html.theme--documenter-dark .hero.is-info .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-info .subtitle a:not(.button),html.theme--documenter-dark .hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-info .navbar-menu{background-color:#024c7d}}html.theme--documenter-dark .hero.is-info .navbar-item,html.theme--documenter-dark .hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-info a.navbar-item:hover,html.theme--documenter-dark .hero.is-info a.navbar-item.is-active,html.theme--documenter-dark .hero.is-info .navbar-link:hover,html.theme--documenter-dark .hero.is-info .navbar-link.is-active{background-color:#023d64;color:#fff}html.theme--documenter-dark .hero.is-info .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-info .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-info .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-info .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#024c7d}html.theme--documenter-dark .hero.is-info.is-bold{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #003a4c 0%, #024c7d 71%, #004299 100%)}}html.theme--documenter-dark .hero.is-success{background-color:#008438;color:#fff}html.theme--documenter-dark .hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-success strong{color:inherit}html.theme--documenter-dark .hero.is-success .title{color:#fff}html.theme--documenter-dark .hero.is-success .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-success .subtitle a:not(.button),html.theme--documenter-dark .hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-success .navbar-menu{background-color:#008438}}html.theme--documenter-dark .hero.is-success .navbar-item,html.theme--documenter-dark .hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-success a.navbar-item:hover,html.theme--documenter-dark .hero.is-success a.navbar-item.is-active,html.theme--documenter-dark .hero.is-success .navbar-link:hover,html.theme--documenter-dark .hero.is-success .navbar-link.is-active{background-color:#006b2d;color:#fff}html.theme--documenter-dark .hero.is-success .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-success .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-success .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-success .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#008438}html.theme--documenter-dark .hero.is-success.is-bold{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #005115 0%, #008438 71%, #009e5d 100%)}}html.theme--documenter-dark .hero.is-warning{background-color:#ad8100;color:#fff}html.theme--documenter-dark .hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-warning strong{color:inherit}html.theme--documenter-dark .hero.is-warning .title{color:#fff}html.theme--documenter-dark .hero.is-warning .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-warning .subtitle a:not(.button),html.theme--documenter-dark .hero.is-warning .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-warning .navbar-menu{background-color:#ad8100}}html.theme--documenter-dark .hero.is-warning .navbar-item,html.theme--documenter-dark .hero.is-warning .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-warning a.navbar-item:hover,html.theme--documenter-dark .hero.is-warning a.navbar-item.is-active,html.theme--documenter-dark .hero.is-warning .navbar-link:hover,html.theme--documenter-dark .hero.is-warning .navbar-link.is-active{background-color:#946e00;color:#fff}html.theme--documenter-dark .hero.is-warning .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-warning .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#ad8100}html.theme--documenter-dark .hero.is-warning.is-bold{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #7a4700 0%, #ad8100 71%, #c7b500 100%)}}html.theme--documenter-dark .hero.is-danger{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),html.theme--documenter-dark .hero.is-danger strong{color:inherit}html.theme--documenter-dark .hero.is-danger .title{color:#fff}html.theme--documenter-dark .hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}html.theme--documenter-dark .hero.is-danger .subtitle a:not(.button),html.theme--documenter-dark .hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){html.theme--documenter-dark .hero.is-danger .navbar-menu{background-color:#9e1b0d}}html.theme--documenter-dark .hero.is-danger .navbar-item,html.theme--documenter-dark .hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}html.theme--documenter-dark .hero.is-danger a.navbar-item:hover,html.theme--documenter-dark .hero.is-danger a.navbar-item.is-active,html.theme--documenter-dark .hero.is-danger .navbar-link:hover,html.theme--documenter-dark .hero.is-danger .navbar-link.is-active{background-color:#86170b;color:#fff}html.theme--documenter-dark .hero.is-danger .tabs a{color:#fff;opacity:0.9}html.theme--documenter-dark .hero.is-danger .tabs a:hover{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs li.is-active a{opacity:1}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a{color:#fff}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-boxed li.is-active a:hover,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a,html.theme--documenter-dark .hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#9e1b0d}html.theme--documenter-dark .hero.is-danger.is-bold{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}@media screen and (max-width: 768px){html.theme--documenter-dark .hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #75030b 0%, #9e1b0d 71%, #ba380a 100%)}}html.theme--documenter-dark .hero.is-small .hero-body,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding-bottom:1.5rem;padding-top:1.5rem}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-medium .hero-body{padding-bottom:9rem;padding-top:9rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero.is-large .hero-body{padding-bottom:18rem;padding-top:18rem}}html.theme--documenter-dark .hero.is-halfheight .hero-body,html.theme--documenter-dark .hero.is-fullheight .hero-body,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}html.theme--documenter-dark .hero.is-halfheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight .hero-body>.container,html.theme--documenter-dark .hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}html.theme--documenter-dark .hero.is-halfheight{min-height:50vh}html.theme--documenter-dark .hero.is-fullheight{min-height:100vh}html.theme--documenter-dark .hero-video{overflow:hidden}html.theme--documenter-dark .hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}html.theme--documenter-dark .hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-video{display:none}}html.theme--documenter-dark .hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){html.theme--documenter-dark .hero-buttons .button{display:flex}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{html.theme--documenter-dark .hero-buttons{display:flex;justify-content:center}html.theme--documenter-dark .hero-buttons .button:not(:last-child){margin-right:1.5rem}}html.theme--documenter-dark .hero-head,html.theme--documenter-dark .hero-foot{flex-grow:0;flex-shrink:0}html.theme--documenter-dark .hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}html.theme--documenter-dark .section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){html.theme--documenter-dark .section.is-medium{padding:9rem 1.5rem}html.theme--documenter-dark .section.is-large{padding:18rem 1.5rem}}html.theme--documenter-dark .footer{background-color:#282f2f;padding:3rem 1.5rem 6rem}html.theme--documenter-dark hr{height:1px}html.theme--documenter-dark h6{text-transform:uppercase;letter-spacing:0.5px}html.theme--documenter-dark .hero{background-color:#343c3d}html.theme--documenter-dark a{transition:all 200ms ease}html.theme--documenter-dark .button{transition:all 200ms ease;border-width:1px;color:#fff}html.theme--documenter-dark .button.is-active,html.theme--documenter-dark .button.is-focused,html.theme--documenter-dark .button:active,html.theme--documenter-dark .button:focus{box-shadow:0 0 0 2px rgba(140,155,157,0.5)}html.theme--documenter-dark .button.is-white.is-hovered,html.theme--documenter-dark .button.is-white:hover{background-color:#fff}html.theme--documenter-dark .button.is-white.is-active,html.theme--documenter-dark .button.is-white.is-focused,html.theme--documenter-dark .button.is-white:active,html.theme--documenter-dark .button.is-white:focus{border-color:#fff;box-shadow:0 0 0 2px rgba(255,255,255,0.5)}html.theme--documenter-dark .button.is-black.is-hovered,html.theme--documenter-dark .button.is-black:hover{background-color:#1d1d1d}html.theme--documenter-dark .button.is-black.is-active,html.theme--documenter-dark .button.is-black.is-focused,html.theme--documenter-dark .button.is-black:active,html.theme--documenter-dark .button.is-black:focus{border-color:#0a0a0a;box-shadow:0 0 0 2px rgba(10,10,10,0.5)}html.theme--documenter-dark .button.is-light.is-hovered,html.theme--documenter-dark .button.is-light:hover{background-color:#fff}html.theme--documenter-dark .button.is-light.is-active,html.theme--documenter-dark .button.is-light.is-focused,html.theme--documenter-dark .button.is-light:active,html.theme--documenter-dark .button.is-light:focus{border-color:#ecf0f1;box-shadow:0 0 0 2px rgba(236,240,241,0.5)}html.theme--documenter-dark .button.is-dark.is-hovered,html.theme--documenter-dark .content kbd.button.is-hovered,html.theme--documenter-dark .button.is-dark:hover,html.theme--documenter-dark .content kbd.button:hover{background-color:#3a4344}html.theme--documenter-dark .button.is-dark.is-active,html.theme--documenter-dark .content kbd.button.is-active,html.theme--documenter-dark .button.is-dark.is-focused,html.theme--documenter-dark .content kbd.button.is-focused,html.theme--documenter-dark .button.is-dark:active,html.theme--documenter-dark .content kbd.button:active,html.theme--documenter-dark .button.is-dark:focus,html.theme--documenter-dark .content kbd.button:focus{border-color:#282f2f;box-shadow:0 0 0 2px rgba(40,47,47,0.5)}html.theme--documenter-dark .button.is-primary.is-hovered,html.theme--documenter-dark .docstring>section>a.button.is-hovered.docs-sourcelink,html.theme--documenter-dark .button.is-primary:hover,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:hover{background-color:#436d9a}html.theme--documenter-dark .button.is-primary.is-active,html.theme--documenter-dark .docstring>section>a.button.is-active.docs-sourcelink,html.theme--documenter-dark .button.is-primary.is-focused,html.theme--documenter-dark .docstring>section>a.button.is-focused.docs-sourcelink,html.theme--documenter-dark .button.is-primary:active,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:active,html.theme--documenter-dark .button.is-primary:focus,html.theme--documenter-dark .docstring>section>a.button.docs-sourcelink:focus{border-color:#375a7f;box-shadow:0 0 0 2px rgba(55,90,127,0.5)}html.theme--documenter-dark .button.is-link.is-hovered,html.theme--documenter-dark .button.is-link:hover{background-color:#1fdeb8}html.theme--documenter-dark .button.is-link.is-active,html.theme--documenter-dark .button.is-link.is-focused,html.theme--documenter-dark .button.is-link:active,html.theme--documenter-dark .button.is-link:focus{border-color:#1abc9c;box-shadow:0 0 0 2px rgba(26,188,156,0.5)}html.theme--documenter-dark .button.is-info.is-hovered,html.theme--documenter-dark .button.is-info:hover{background-color:#0363a3}html.theme--documenter-dark .button.is-info.is-active,html.theme--documenter-dark .button.is-info.is-focused,html.theme--documenter-dark .button.is-info:active,html.theme--documenter-dark .button.is-info:focus{border-color:#024c7d;box-shadow:0 0 0 2px rgba(2,76,125,0.5)}html.theme--documenter-dark .button.is-success.is-hovered,html.theme--documenter-dark .button.is-success:hover{background-color:#00aa48}html.theme--documenter-dark .button.is-success.is-active,html.theme--documenter-dark .button.is-success.is-focused,html.theme--documenter-dark .button.is-success:active,html.theme--documenter-dark .button.is-success:focus{border-color:#008438;box-shadow:0 0 0 2px rgba(0,132,56,0.5)}html.theme--documenter-dark .button.is-warning.is-hovered,html.theme--documenter-dark .button.is-warning:hover{background-color:#d39e00}html.theme--documenter-dark .button.is-warning.is-active,html.theme--documenter-dark .button.is-warning.is-focused,html.theme--documenter-dark .button.is-warning:active,html.theme--documenter-dark .button.is-warning:focus{border-color:#ad8100;box-shadow:0 0 0 2px rgba(173,129,0,0.5)}html.theme--documenter-dark .button.is-danger.is-hovered,html.theme--documenter-dark .button.is-danger:hover{background-color:#c12110}html.theme--documenter-dark .button.is-danger.is-active,html.theme--documenter-dark .button.is-danger.is-focused,html.theme--documenter-dark .button.is-danger:active,html.theme--documenter-dark .button.is-danger:focus{border-color:#9e1b0d;box-shadow:0 0 0 2px rgba(158,27,13,0.5)}html.theme--documenter-dark .label{color:#dbdee0}html.theme--documenter-dark .button,html.theme--documenter-dark .control.has-icons-left .icon,html.theme--documenter-dark .control.has-icons-right .icon,html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .pagination-ellipsis,html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous,html.theme--documenter-dark .select,html.theme--documenter-dark .select select,html.theme--documenter-dark .textarea{height:2.5em}html.theme--documenter-dark .input,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark .textarea{transition:all 200ms ease;box-shadow:none;border-width:1px;padding-left:1em;padding-right:1em}html.theme--documenter-dark .select:after,html.theme--documenter-dark .select select{border-width:1px}html.theme--documenter-dark .control.has-addons .button,html.theme--documenter-dark .control.has-addons .input,html.theme--documenter-dark .control.has-addons #documenter .docs-sidebar form.docs-search>input,html.theme--documenter-dark #documenter .docs-sidebar .control.has-addons form.docs-search>input,html.theme--documenter-dark .control.has-addons .select{margin-right:-1px}html.theme--documenter-dark .notification{background-color:#343c3d}html.theme--documenter-dark .card{box-shadow:none;border:1px solid #343c3d;background-color:#282f2f;border-radius:.4em}html.theme--documenter-dark .card .card-image img{border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-header{box-shadow:none;background-color:rgba(18,18,18,0.2);border-radius:.4em .4em 0 0}html.theme--documenter-dark .card .card-footer{background-color:rgba(18,18,18,0.2)}html.theme--documenter-dark .card .card-footer,html.theme--documenter-dark .card .card-footer-item{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .notification.is-white a:not(.button){color:#0a0a0a;text-decoration:underline}html.theme--documenter-dark .notification.is-black a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-light a:not(.button){color:#282f2f;text-decoration:underline}html.theme--documenter-dark .notification.is-dark a:not(.button),html.theme--documenter-dark .content kbd.notification a:not(.button){color:#ecf0f1;text-decoration:underline}html.theme--documenter-dark .notification.is-primary a:not(.button),html.theme--documenter-dark .docstring>section>a.notification.docs-sourcelink a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-link a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-info a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-success a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-warning a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .notification.is-danger a:not(.button){color:#fff;text-decoration:underline}html.theme--documenter-dark .tag,html.theme--documenter-dark .content kbd,html.theme--documenter-dark .docstring>section>a.docs-sourcelink{border-radius:.4em}html.theme--documenter-dark .menu-list a{transition:all 300ms ease}html.theme--documenter-dark .modal-card-body{background-color:#282f2f}html.theme--documenter-dark .modal-card-foot,html.theme--documenter-dark .modal-card-head{border-color:#343c3d}html.theme--documenter-dark .message-header{font-weight:700;background-color:#343c3d;color:#fff}html.theme--documenter-dark .message-body{border-width:1px;border-color:#343c3d}html.theme--documenter-dark .navbar{border-radius:.4em}html.theme--documenter-dark .navbar.is-transparent{background:none}html.theme--documenter-dark .navbar.is-primary .navbar-dropdown a.navbar-item.is-active,html.theme--documenter-dark .docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#1abc9c}@media screen and (max-width: 1055px){html.theme--documenter-dark .navbar .navbar-menu{background-color:#375a7f;border-radius:0 0 .4em .4em}}html.theme--documenter-dark .hero .navbar,html.theme--documenter-dark body>.navbar{border-radius:0}html.theme--documenter-dark .pagination-link,html.theme--documenter-dark .pagination-next,html.theme--documenter-dark .pagination-previous{border-width:1px}html.theme--documenter-dark .panel-block,html.theme--documenter-dark .panel-heading,html.theme--documenter-dark .panel-tabs{border-width:1px}html.theme--documenter-dark .panel-block:first-child,html.theme--documenter-dark .panel-heading:first-child,html.theme--documenter-dark .panel-tabs:first-child{border-top-width:1px}html.theme--documenter-dark .panel-heading{font-weight:700}html.theme--documenter-dark .panel-tabs a{border-width:1px;margin-bottom:-1px}html.theme--documenter-dark .panel-tabs a.is-active{border-bottom-color:#17a689}html.theme--documenter-dark .panel-block:hover{color:#1dd2af}html.theme--documenter-dark .panel-block:hover .panel-icon{color:#1dd2af}html.theme--documenter-dark .panel-block.is-active .panel-icon{color:#17a689}html.theme--documenter-dark .tabs a{border-bottom-width:1px;margin-bottom:-1px}html.theme--documenter-dark .tabs ul{border-bottom-width:1px}html.theme--documenter-dark .tabs.is-boxed a{border-width:1px}html.theme--documenter-dark .tabs.is-boxed li.is-active a{background-color:#1f2424}html.theme--documenter-dark .tabs.is-toggle li a{border-width:1px;margin-bottom:0}html.theme--documenter-dark .tabs.is-toggle li+li{margin-left:-1px}html.theme--documenter-dark .hero.is-white .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-black .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-light .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-dark .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .content kbd.hero .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-primary .navbar .navbar-dropdown .navbar-item:hover,html.theme--documenter-dark .docstring>section>a.hero.docs-sourcelink .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-link .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-info .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-success .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-warning .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark .hero.is-danger .navbar .navbar-dropdown .navbar-item:hover{background-color:rgba(0,0,0,0)}html.theme--documenter-dark h1 .docs-heading-anchor,html.theme--documenter-dark h1 .docs-heading-anchor:hover,html.theme--documenter-dark h1 .docs-heading-anchor:visited,html.theme--documenter-dark h2 .docs-heading-anchor,html.theme--documenter-dark h2 .docs-heading-anchor:hover,html.theme--documenter-dark h2 .docs-heading-anchor:visited,html.theme--documenter-dark h3 .docs-heading-anchor,html.theme--documenter-dark h3 .docs-heading-anchor:hover,html.theme--documenter-dark h3 .docs-heading-anchor:visited,html.theme--documenter-dark h4 .docs-heading-anchor,html.theme--documenter-dark h4 .docs-heading-anchor:hover,html.theme--documenter-dark h4 .docs-heading-anchor:visited,html.theme--documenter-dark h5 .docs-heading-anchor,html.theme--documenter-dark h5 .docs-heading-anchor:hover,html.theme--documenter-dark h5 .docs-heading-anchor:visited,html.theme--documenter-dark h6 .docs-heading-anchor,html.theme--documenter-dark h6 .docs-heading-anchor:hover,html.theme--documenter-dark h6 .docs-heading-anchor:visited{color:#f2f2f2}html.theme--documenter-dark h1 .docs-heading-anchor-permalink,html.theme--documenter-dark h2 .docs-heading-anchor-permalink,html.theme--documenter-dark h3 .docs-heading-anchor-permalink,html.theme--documenter-dark h4 .docs-heading-anchor-permalink,html.theme--documenter-dark h5 .docs-heading-anchor-permalink,html.theme--documenter-dark h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}html.theme--documenter-dark h1 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h2 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h3 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h4 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h5 .docs-heading-anchor-permalink::before,html.theme--documenter-dark h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f0c1"}html.theme--documenter-dark h1:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h2:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h3:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h4:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h5:hover .docs-heading-anchor-permalink,html.theme--documenter-dark h6:hover .docs-heading-anchor-permalink{visibility:visible}html.theme--documenter-dark .docs-light-only{display:none !important}html.theme--documenter-dark pre{position:relative;overflow:hidden}html.theme--documenter-dark pre code,html.theme--documenter-dark pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}html.theme--documenter-dark pre code:first-of-type,html.theme--documenter-dark pre code.hljs:first-of-type{padding-top:0.5rem !important}html.theme--documenter-dark pre code:last-of-type,html.theme--documenter-dark pre code.hljs:last-of-type{padding-bottom:0.5rem !important}html.theme--documenter-dark pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 5 Free";color:#fff;cursor:pointer;text-align:center}html.theme--documenter-dark pre .copy-button:focus,html.theme--documenter-dark pre .copy-button:hover{opacity:1;background:rgba(255,255,255,0.1);color:#1abc9c}html.theme--documenter-dark pre .copy-button.success{color:#259a12;opacity:1}html.theme--documenter-dark pre .copy-button.error{color:#cb3c33;opacity:1}html.theme--documenter-dark pre:hover .copy-button{opacity:1}html.theme--documenter-dark .admonition{background-color:#282f2f;border-style:solid;border-width:1px;border-color:#5e6d6f;border-radius:.4em;font-size:15px}html.theme--documenter-dark .admonition strong{color:currentColor}html.theme--documenter-dark .admonition.is-small,html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input.admonition{font-size:.85em}html.theme--documenter-dark .admonition.is-medium{font-size:1.25rem}html.theme--documenter-dark .admonition.is-large{font-size:1.5rem}html.theme--documenter-dark .admonition.is-default{background-color:#282f2f;border-color:#5e6d6f}html.theme--documenter-dark .admonition.is-default>.admonition-header{background-color:#5e6d6f;color:#fff}html.theme--documenter-dark .admonition.is-default>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-info{background-color:#282f2f;border-color:#024c7d}html.theme--documenter-dark .admonition.is-info>.admonition-header{background-color:#024c7d;color:#fff}html.theme--documenter-dark .admonition.is-info>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-success{background-color:#282f2f;border-color:#008438}html.theme--documenter-dark .admonition.is-success>.admonition-header{background-color:#008438;color:#fff}html.theme--documenter-dark .admonition.is-success>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-warning{background-color:#282f2f;border-color:#ad8100}html.theme--documenter-dark .admonition.is-warning>.admonition-header{background-color:#ad8100;color:#fff}html.theme--documenter-dark .admonition.is-warning>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-danger{background-color:#282f2f;border-color:#9e1b0d}html.theme--documenter-dark .admonition.is-danger>.admonition-header{background-color:#9e1b0d;color:#fff}html.theme--documenter-dark .admonition.is-danger>.admonition-body{color:#fff}html.theme--documenter-dark .admonition.is-compat{background-color:#282f2f;border-color:#137886}html.theme--documenter-dark .admonition.is-compat>.admonition-header{background-color:#137886;color:#fff}html.theme--documenter-dark .admonition.is-compat>.admonition-body{color:#fff}html.theme--documenter-dark .admonition-header{color:#fff;background-color:#5e6d6f;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}html.theme--documenter-dark .admonition-header:before{font-family:"Font Awesome 5 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}html.theme--documenter-dark .admonition-body{color:#fff;padding:0.5rem .75rem}html.theme--documenter-dark .admonition-body pre{background-color:#282f2f}html.theme--documenter-dark .admonition-body code{background-color:rgba(255,255,255,0.05)}html.theme--documenter-dark .docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #5e6d6f;box-shadow:none;max-width:100%}html.theme--documenter-dark .docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#282f2f;box-shadow:0 1px 2px rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>header code{background-color:transparent}html.theme--documenter-dark .docstring>header .docstring-binding{margin-right:0.3em}html.theme--documenter-dark .docstring>header .docstring-category{margin-left:0.3em}html.theme--documenter-dark .docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #5e6d6f}html.theme--documenter-dark .docstring>section:last-child{border-bottom:none}html.theme--documenter-dark .docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}html.theme--documenter-dark .docstring>section>a.docs-sourcelink:focus{opacity:1 !important}html.theme--documenter-dark .docstring:hover>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}html.theme--documenter-dark .docstring>section:hover a.docs-sourcelink{opacity:1}html.theme--documenter-dark .documenter-example-output{background-color:#1f2424}html.theme--documenter-dark .outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#282f2f;color:#fff;border-bottom:3px solid #9e1b0d;padding:10px 35px;text-align:center;font-size:15px}html.theme--documenter-dark .outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}html.theme--documenter-dark .outdated-warning-overlay a{color:#1abc9c}html.theme--documenter-dark .outdated-warning-overlay a:hover{color:#1dd2af}html.theme--documenter-dark .content pre{border:1px solid #5e6d6f}html.theme--documenter-dark .content code{font-weight:inherit}html.theme--documenter-dark .content a code{color:#1abc9c}html.theme--documenter-dark .content h1 code,html.theme--documenter-dark .content h2 code,html.theme--documenter-dark .content h3 code,html.theme--documenter-dark .content h4 code,html.theme--documenter-dark .content h5 code,html.theme--documenter-dark .content h6 code{color:#f2f2f2}html.theme--documenter-dark .content table{display:block;width:initial;max-width:100%;overflow-x:auto}html.theme--documenter-dark .content blockquote>ul:first-child,html.theme--documenter-dark .content blockquote>ol:first-child,html.theme--documenter-dark .content .admonition-body>ul:first-child,html.theme--documenter-dark .content .admonition-body>ol:first-child{margin-top:0}html.theme--documenter-dark pre,html.theme--documenter-dark code{font-variant-ligatures:no-contextual}html.theme--documenter-dark .breadcrumb a.is-disabled{cursor:default;pointer-events:none}html.theme--documenter-dark .breadcrumb a.is-disabled,html.theme--documenter-dark .breadcrumb a.is-disabled:hover{color:#f2f2f2}html.theme--documenter-dark .hljs{background:initial !important}html.theme--documenter-dark .katex .katex-mathml{top:0;right:0}html.theme--documenter-dark .katex-display,html.theme--documenter-dark mjx-container,html.theme--documenter-dark .MathJax_Display{margin:0.5em 0 !important}html.theme--documenter-dark html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}html.theme--documenter-dark li.no-marker{list-style:none}html.theme--documenter-dark #documenter .docs-main>article{overflow-wrap:break-word}html.theme--documenter-dark #documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main{width:100%}html.theme--documenter-dark #documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-main>header,html.theme--documenter-dark #documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}html.theme--documenter-dark #documenter .docs-main header.docs-navbar{background-color:#1f2424;border-bottom:1px solid #5e6d6f;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-icon,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label,html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{display:inline-block}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-settings-button{margin:auto 0 auto 1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{font-size:1.5rem;margin:auto 0 auto 1rem}html.theme--documenter-dark #documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #171717;transition-duration:0.7s;-webkit-transition-duration:0.7s}html.theme--documenter-dark #documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}html.theme--documenter-dark #documenter .docs-main section.footnotes{border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-main section.footnotes li .tag:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,html.theme--documenter-dark #documenter .docs-main section.footnotes li .content kbd:first-child,html.theme--documenter-dark .content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}html.theme--documenter-dark #documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #5e6d6f;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage,html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}html.theme--documenter-dark #documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}html.theme--documenter-dark #documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}html.theme--documenter-dark #documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}html.theme--documenter-dark #documenter .docs-sidebar{display:flex;flex-direction:column;color:#fff;background-color:#282f2f;border-right:1px solid #5e6d6f;padding:0;flex:0 0 18rem;z-index:5;font-size:15px;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}html.theme--documenter-dark #documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #171717}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar{left:0;top:0}}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a,html.theme--documenter-dark #documenter .docs-sidebar .docs-package-name a:hover{color:#fff}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector{border-top:1px solid #5e6d6f;display:none;padding:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar .docs-version-selector.visible{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #5e6d6f;padding-bottom:1.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li li{font-size:14.25px;margin-left:1em;border-left:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:11.25px;margin-left:1rem;margin-top:auto;margin-bottom:auto}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f054"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#fff;background:#282f2f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu a.tocitem:hover,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#fff;background-color:#32393a}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #5e6d6f;border-bottom:1px solid #5e6d6f;background-color:#1f2424}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#1f2424;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#32393a;color:#fff}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #5e6d6f}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:12.75px;border-left:none;margin-left:0;margin-top:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}html.theme--documenter-dark #documenter .docs-sidebar form.docs-search>input{width:14.4rem}@media screen and (min-width: 1056px){html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}@media screen and (max-width: 1055px){html.theme--documenter-dark #documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#3b4445}html.theme--documenter-dark #documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#4e5a5c}}html.theme--documenter-dark #documenter .docs-main #documenter-search-info{margin-bottom:1rem}html.theme--documenter-dark #documenter .docs-main #documenter-search-results{list-style-type:circle;list-style-position:outside}html.theme--documenter-dark #documenter .docs-main #documenter-search-results li{margin-left:2rem}html.theme--documenter-dark #documenter .docs-main #documenter-search-results .docs-highlight{background-color:yellow}html.theme--documenter-dark{background-color:#1f2424;font-size:16px;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}html.theme--documenter-dark .ansi span.sgr1{font-weight:bolder}html.theme--documenter-dark .ansi span.sgr2{font-weight:lighter}html.theme--documenter-dark .ansi span.sgr3{font-style:italic}html.theme--documenter-dark .ansi span.sgr4{text-decoration:underline}html.theme--documenter-dark .ansi span.sgr7{color:#1f2424;background-color:#fff}html.theme--documenter-dark .ansi span.sgr8{color:transparent}html.theme--documenter-dark .ansi span.sgr8 span{color:transparent}html.theme--documenter-dark .ansi span.sgr9{text-decoration:line-through}html.theme--documenter-dark .ansi span.sgr30{color:#242424}html.theme--documenter-dark .ansi span.sgr31{color:#f6705f}html.theme--documenter-dark .ansi span.sgr32{color:#4fb43a}html.theme--documenter-dark .ansi span.sgr33{color:#f4c72f}html.theme--documenter-dark .ansi span.sgr34{color:#7587f0}html.theme--documenter-dark .ansi span.sgr35{color:#bc89d3}html.theme--documenter-dark .ansi span.sgr36{color:#49b6ca}html.theme--documenter-dark .ansi span.sgr37{color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr40{background-color:#242424}html.theme--documenter-dark .ansi span.sgr41{background-color:#f6705f}html.theme--documenter-dark .ansi span.sgr42{background-color:#4fb43a}html.theme--documenter-dark .ansi span.sgr43{background-color:#f4c72f}html.theme--documenter-dark .ansi span.sgr44{background-color:#7587f0}html.theme--documenter-dark .ansi span.sgr45{background-color:#bc89d3}html.theme--documenter-dark .ansi span.sgr46{background-color:#49b6ca}html.theme--documenter-dark .ansi span.sgr47{background-color:#b3bdbe}html.theme--documenter-dark .ansi span.sgr90{color:#92a0a2}html.theme--documenter-dark .ansi span.sgr91{color:#ff8674}html.theme--documenter-dark .ansi span.sgr92{color:#79d462}html.theme--documenter-dark .ansi span.sgr93{color:#ffe76b}html.theme--documenter-dark .ansi span.sgr94{color:#8a98ff}html.theme--documenter-dark .ansi span.sgr95{color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr96{color:#6bc8db}html.theme--documenter-dark .ansi span.sgr97{color:#ecf0f1}html.theme--documenter-dark .ansi span.sgr100{background-color:#92a0a2}html.theme--documenter-dark .ansi span.sgr101{background-color:#ff8674}html.theme--documenter-dark .ansi span.sgr102{background-color:#79d462}html.theme--documenter-dark .ansi span.sgr103{background-color:#ffe76b}html.theme--documenter-dark .ansi span.sgr104{background-color:#8a98ff}html.theme--documenter-dark .ansi span.sgr105{background-color:#d2a4e6}html.theme--documenter-dark .ansi span.sgr106{background-color:#6bc8db}html.theme--documenter-dark .ansi span.sgr107{background-color:#ecf0f1}html.theme--documenter-dark code.language-julia-repl>span.hljs-meta{color:#4fb43a;font-weight:bolder}html.theme--documenter-dark .hljs{background:#2b2b2b;color:#f8f8f2}html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-quote{color:#d4d0ab}html.theme--documenter-dark .hljs-variable,html.theme--documenter-dark .hljs-template-variable,html.theme--documenter-dark .hljs-tag,html.theme--documenter-dark .hljs-name,html.theme--documenter-dark .hljs-selector-id,html.theme--documenter-dark .hljs-selector-class,html.theme--documenter-dark .hljs-regexp,html.theme--documenter-dark .hljs-deletion{color:#ffa07a}html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-link{color:#f5ab35}html.theme--documenter-dark .hljs-attribute{color:#ffd700}html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-addition{color:#abe338}html.theme--documenter-dark .hljs-title,html.theme--documenter-dark .hljs-section{color:#00e0e0}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{color:#dcc6e0}html.theme--documenter-dark .hljs-emphasis{font-style:italic}html.theme--documenter-dark .hljs-strong{font-weight:bold}@media screen and (-ms-high-contrast: active){html.theme--documenter-dark .hljs-addition,html.theme--documenter-dark .hljs-attribute,html.theme--documenter-dark .hljs-built_in,html.theme--documenter-dark .hljs-bullet,html.theme--documenter-dark .hljs-comment,html.theme--documenter-dark .hljs-link,html.theme--documenter-dark .hljs-literal,html.theme--documenter-dark .hljs-meta,html.theme--documenter-dark .hljs-number,html.theme--documenter-dark .hljs-params,html.theme--documenter-dark .hljs-string,html.theme--documenter-dark .hljs-symbol,html.theme--documenter-dark .hljs-type,html.theme--documenter-dark .hljs-quote{color:highlight}html.theme--documenter-dark .hljs-keyword,html.theme--documenter-dark .hljs-selector-tag{font-weight:bold}}html.theme--documenter-dark .hljs-subst{color:#f8f8f2} diff --git a/v0.28.3/assets/themes/documenter-light.css b/v0.28.3/assets/themes/documenter-light.css new file mode 100644 index 0000000000..9b9a14b043 --- /dev/null +++ b/v0.28.3/assets/themes/documenter-light.css @@ -0,0 +1,9 @@ +@keyframes spinAround{from{transform:rotate(0deg)}to{transform:rotate(359deg)}}.tabs,.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.breadcrumb,.file,.button,.is-unselectable,.modal-close,.delete{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.navbar-link:not(.is-arrowless)::after,.select:not(.is-multiple):not(.is-loading)::after{border:3px solid rgba(0,0,0,0);border-radius:2px;border-right:0;border-top:0;content:" ";display:block;height:0.625em;margin-top:-0.4375em;pointer-events:none;position:absolute;top:50%;transform:rotate(-45deg);transform-origin:center;width:0.625em}.admonition:not(:last-child),.tabs:not(:last-child),.message:not(:last-child),.list:not(:last-child),.level:not(:last-child),.breadcrumb:not(:last-child),.highlight:not(:last-child),.block:not(:last-child),.title:not(:last-child),.subtitle:not(:last-child),.table-container:not(:last-child),.table:not(:last-child),.progress:not(:last-child),.notification:not(:last-child),.content:not(:last-child),.box:not(:last-child){margin-bottom:1.5rem}.modal-close,.delete{-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,0.2);border:none;border-radius:290486px;cursor:pointer;pointer-events:auto;display:inline-block;flex-grow:0;flex-shrink:0;font-size:0;height:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:none;position:relative;vertical-align:top;width:20px}.modal-close::before,.delete::before,.modal-close::after,.delete::after{background-color:#fff;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.modal-close::before,.delete::before{height:2px;width:50%}.modal-close::after,.delete::after{height:50%;width:2px}.modal-close:hover,.delete:hover,.modal-close:focus,.delete:focus{background-color:rgba(10,10,10,0.3)}.modal-close:active,.delete:active{background-color:rgba(10,10,10,0.4)}.is-small.modal-close,#documenter .docs-sidebar form.docs-search>input.modal-close,.is-small.delete,#documenter .docs-sidebar form.docs-search>input.delete{height:16px;max-height:16px;max-width:16px;min-height:16px;min-width:16px;width:16px}.is-medium.modal-close,.is-medium.delete{height:24px;max-height:24px;max-width:24px;min-height:24px;min-width:24px;width:24px}.is-large.modal-close,.is-large.delete{height:32px;max-height:32px;max-width:32px;min-height:32px;min-width:32px;width:32px}.control.is-loading::after,.select.is-loading::after,.loader,.button.is-loading::after{animation:spinAround 500ms infinite linear;border:2px solid #dbdbdb;border-radius:290486px;border-right-color:transparent;border-top-color:transparent;content:"";display:block;height:1em;position:relative;width:1em}.hero-video,.modal-background,.modal,.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio,.is-overlay{bottom:0;left:0;position:absolute;right:0;top:0}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis,.file-cta,.file-name,.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input,.button{-moz-appearance:none;-webkit-appearance:none;align-items:center;border:1px solid transparent;border-radius:4px;box-shadow:none;display:inline-flex;font-size:1rem;height:2.25em;justify-content:flex-start;line-height:1.5;padding-bottom:calc(0.375em - 1px);padding-left:calc(0.625em - 1px);padding-right:calc(0.625em - 1px);padding-top:calc(0.375em - 1px);position:relative;vertical-align:top}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus,.pagination-ellipsis:focus,.file-cta:focus,.file-name:focus,.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.button:focus,.is-focused.pagination-previous,.is-focused.pagination-next,.is-focused.pagination-link,.is-focused.pagination-ellipsis,.is-focused.file-cta,.is-focused.file-name,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-focused.button,.pagination-previous:active,.pagination-next:active,.pagination-link:active,.pagination-ellipsis:active,.file-cta:active,.file-name:active,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.button:active,.is-active.pagination-previous,.is-active.pagination-next,.is-active.pagination-link,.is-active.pagination-ellipsis,.is-active.file-cta,.is-active.file-name,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.is-active.button{outline:none}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled],.pagination-ellipsis[disabled],.file-cta[disabled],.file-name[disabled],.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],.button[disabled],fieldset[disabled] .pagination-previous,fieldset[disabled] .pagination-next,fieldset[disabled] .pagination-link,fieldset[disabled] .pagination-ellipsis,fieldset[disabled] .file-cta,fieldset[disabled] .file-name,fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input,fieldset[disabled] .button{cursor:not-allowed}/*! minireset.css v0.0.4 | MIT License | github.com/jgthms/minireset.css */html,body,p,ol,ul,li,dl,dt,dd,blockquote,figure,fieldset,legend,textarea,pre,iframe,hr,h1,h2,h3,h4,h5,h6{margin:0;padding:0}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal}ul{list-style:none}button,input,select,textarea{margin:0}html{box-sizing:border-box}*,*::before,*::after{box-sizing:inherit}img,embed,iframe,object,video{height:auto;max-width:100%}audio{max-width:100%}iframe{border:0}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}td:not([align]),th:not([align]){text-align:left}html{background-color:#fff;font-size:16px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;min-width:300px;overflow-x:auto;overflow-y:scroll;text-rendering:optimizeLegibility;text-size-adjust:100%}article,aside,figure,footer,header,hgroup,section{display:block}body,button,input,select,textarea{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif}code,pre{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto;font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace}body{color:#222;font-size:1em;font-weight:400;line-height:1.5}a{color:#2e63b8;cursor:pointer;text-decoration:none}a strong{color:currentColor}a:hover{color:#363636}code{background-color:rgba(0,0,0,0.05);color:#000;font-size:.875em;font-weight:normal;padding:.1em}hr{background-color:#f5f5f5;border:none;display:block;height:2px;margin:1.5rem 0}img{height:auto;max-width:100%}input[type="checkbox"],input[type="radio"]{vertical-align:baseline}small{font-size:.875em}span{font-style:inherit;font-weight:inherit}strong{color:#222;font-weight:700}fieldset{border:none}pre{-webkit-overflow-scrolling:touch;background-color:#f5f5f5;color:#222;font-size:.875em;overflow-x:auto;padding:1.25rem 1.5rem;white-space:pre;word-wrap:normal}pre code{background-color:transparent;color:currentColor;font-size:1em;padding:0}table td,table th{vertical-align:top}table td:not([align]),table th:not([align]){text-align:left}table th{color:#222}.is-clearfix::after{clear:both;content:" ";display:table}.is-pulled-left{float:left !important}.is-pulled-right{float:right !important}.is-clipped{overflow:hidden !important}.is-size-1{font-size:3rem !important}.is-size-2{font-size:2.5rem !important}.is-size-3{font-size:2rem !important}.is-size-4{font-size:1.5rem !important}.is-size-5{font-size:1.25rem !important}.is-size-6{font-size:1rem !important}.is-size-7,.docstring>section>a.docs-sourcelink{font-size:.75rem !important}@media screen and (max-width: 768px){.is-size-1-mobile{font-size:3rem !important}.is-size-2-mobile{font-size:2.5rem !important}.is-size-3-mobile{font-size:2rem !important}.is-size-4-mobile{font-size:1.5rem !important}.is-size-5-mobile{font-size:1.25rem !important}.is-size-6-mobile{font-size:1rem !important}.is-size-7-mobile{font-size:.75rem !important}}@media screen and (min-width: 769px),print{.is-size-1-tablet{font-size:3rem !important}.is-size-2-tablet{font-size:2.5rem !important}.is-size-3-tablet{font-size:2rem !important}.is-size-4-tablet{font-size:1.5rem !important}.is-size-5-tablet{font-size:1.25rem !important}.is-size-6-tablet{font-size:1rem !important}.is-size-7-tablet{font-size:.75rem !important}}@media screen and (max-width: 1055px){.is-size-1-touch{font-size:3rem !important}.is-size-2-touch{font-size:2.5rem !important}.is-size-3-touch{font-size:2rem !important}.is-size-4-touch{font-size:1.5rem !important}.is-size-5-touch{font-size:1.25rem !important}.is-size-6-touch{font-size:1rem !important}.is-size-7-touch{font-size:.75rem !important}}@media screen and (min-width: 1056px){.is-size-1-desktop{font-size:3rem !important}.is-size-2-desktop{font-size:2.5rem !important}.is-size-3-desktop{font-size:2rem !important}.is-size-4-desktop{font-size:1.5rem !important}.is-size-5-desktop{font-size:1.25rem !important}.is-size-6-desktop{font-size:1rem !important}.is-size-7-desktop{font-size:.75rem !important}}@media screen and (min-width: 1216px){.is-size-1-widescreen{font-size:3rem !important}.is-size-2-widescreen{font-size:2.5rem !important}.is-size-3-widescreen{font-size:2rem !important}.is-size-4-widescreen{font-size:1.5rem !important}.is-size-5-widescreen{font-size:1.25rem !important}.is-size-6-widescreen{font-size:1rem !important}.is-size-7-widescreen{font-size:.75rem !important}}@media screen and (min-width: 1408px){.is-size-1-fullhd{font-size:3rem !important}.is-size-2-fullhd{font-size:2.5rem !important}.is-size-3-fullhd{font-size:2rem !important}.is-size-4-fullhd{font-size:1.5rem !important}.is-size-5-fullhd{font-size:1.25rem !important}.is-size-6-fullhd{font-size:1rem !important}.is-size-7-fullhd{font-size:.75rem !important}}.has-text-centered{text-align:center !important}.has-text-justified{text-align:justify !important}.has-text-left{text-align:left !important}.has-text-right{text-align:right !important}@media screen and (max-width: 768px){.has-text-centered-mobile{text-align:center !important}}@media screen and (min-width: 769px),print{.has-text-centered-tablet{text-align:center !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-centered-tablet-only{text-align:center !important}}@media screen and (max-width: 1055px){.has-text-centered-touch{text-align:center !important}}@media screen and (min-width: 1056px){.has-text-centered-desktop{text-align:center !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-centered-desktop-only{text-align:center !important}}@media screen and (min-width: 1216px){.has-text-centered-widescreen{text-align:center !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-centered-widescreen-only{text-align:center !important}}@media screen and (min-width: 1408px){.has-text-centered-fullhd{text-align:center !important}}@media screen and (max-width: 768px){.has-text-justified-mobile{text-align:justify !important}}@media screen and (min-width: 769px),print{.has-text-justified-tablet{text-align:justify !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-justified-tablet-only{text-align:justify !important}}@media screen and (max-width: 1055px){.has-text-justified-touch{text-align:justify !important}}@media screen and (min-width: 1056px){.has-text-justified-desktop{text-align:justify !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-justified-desktop-only{text-align:justify !important}}@media screen and (min-width: 1216px){.has-text-justified-widescreen{text-align:justify !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-justified-widescreen-only{text-align:justify !important}}@media screen and (min-width: 1408px){.has-text-justified-fullhd{text-align:justify !important}}@media screen and (max-width: 768px){.has-text-left-mobile{text-align:left !important}}@media screen and (min-width: 769px),print{.has-text-left-tablet{text-align:left !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-left-tablet-only{text-align:left !important}}@media screen and (max-width: 1055px){.has-text-left-touch{text-align:left !important}}@media screen and (min-width: 1056px){.has-text-left-desktop{text-align:left !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-left-desktop-only{text-align:left !important}}@media screen and (min-width: 1216px){.has-text-left-widescreen{text-align:left !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-left-widescreen-only{text-align:left !important}}@media screen and (min-width: 1408px){.has-text-left-fullhd{text-align:left !important}}@media screen and (max-width: 768px){.has-text-right-mobile{text-align:right !important}}@media screen and (min-width: 769px),print{.has-text-right-tablet{text-align:right !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.has-text-right-tablet-only{text-align:right !important}}@media screen and (max-width: 1055px){.has-text-right-touch{text-align:right !important}}@media screen and (min-width: 1056px){.has-text-right-desktop{text-align:right !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.has-text-right-desktop-only{text-align:right !important}}@media screen and (min-width: 1216px){.has-text-right-widescreen{text-align:right !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.has-text-right-widescreen-only{text-align:right !important}}@media screen and (min-width: 1408px){.has-text-right-fullhd{text-align:right !important}}.is-capitalized{text-transform:capitalize !important}.is-lowercase{text-transform:lowercase !important}.is-uppercase{text-transform:uppercase !important}.is-italic{font-style:italic !important}.has-text-white{color:#fff !important}a.has-text-white:hover,a.has-text-white:focus{color:#e6e6e6 !important}.has-background-white{background-color:#fff !important}.has-text-black{color:#0a0a0a !important}a.has-text-black:hover,a.has-text-black:focus{color:#000 !important}.has-background-black{background-color:#0a0a0a !important}.has-text-light{color:#f5f5f5 !important}a.has-text-light:hover,a.has-text-light:focus{color:#dbdbdb !important}.has-background-light{background-color:#f5f5f5 !important}.has-text-dark{color:#363636 !important}a.has-text-dark:hover,a.has-text-dark:focus{color:#1c1c1c !important}.has-background-dark{background-color:#363636 !important}.has-text-primary{color:#4eb5de !important}a.has-text-primary:hover,a.has-text-primary:focus{color:#27a1d2 !important}.has-background-primary{background-color:#4eb5de !important}.has-text-link{color:#2e63b8 !important}a.has-text-link:hover,a.has-text-link:focus{color:#244d8f !important}.has-background-link{background-color:#2e63b8 !important}.has-text-info{color:#209cee !important}a.has-text-info:hover,a.has-text-info:focus{color:#1081cb !important}.has-background-info{background-color:#209cee !important}.has-text-success{color:#22c35b !important}a.has-text-success:hover,a.has-text-success:focus{color:#1a9847 !important}.has-background-success{background-color:#22c35b !important}.has-text-warning{color:#ffdd57 !important}a.has-text-warning:hover,a.has-text-warning:focus{color:#ffd324 !important}.has-background-warning{background-color:#ffdd57 !important}.has-text-danger{color:#da0b00 !important}a.has-text-danger:hover,a.has-text-danger:focus{color:#a70800 !important}.has-background-danger{background-color:#da0b00 !important}.has-text-black-bis{color:#121212 !important}.has-background-black-bis{background-color:#121212 !important}.has-text-black-ter{color:#242424 !important}.has-background-black-ter{background-color:#242424 !important}.has-text-grey-darker{color:#363636 !important}.has-background-grey-darker{background-color:#363636 !important}.has-text-grey-dark{color:#4a4a4a !important}.has-background-grey-dark{background-color:#4a4a4a !important}.has-text-grey{color:#6b6b6b !important}.has-background-grey{background-color:#6b6b6b !important}.has-text-grey-light{color:#b5b5b5 !important}.has-background-grey-light{background-color:#b5b5b5 !important}.has-text-grey-lighter{color:#dbdbdb !important}.has-background-grey-lighter{background-color:#dbdbdb !important}.has-text-white-ter{color:#f5f5f5 !important}.has-background-white-ter{background-color:#f5f5f5 !important}.has-text-white-bis{color:#fafafa !important}.has-background-white-bis{background-color:#fafafa !important}.has-text-weight-light{font-weight:300 !important}.has-text-weight-normal{font-weight:400 !important}.has-text-weight-medium{font-weight:500 !important}.has-text-weight-semibold{font-weight:600 !important}.has-text-weight-bold{font-weight:700 !important}.is-family-primary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-secondary{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-sans-serif{font-family:"Lato Medium",-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","Helvetica","Arial",sans-serif !important}.is-family-monospace{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-family-code{font-family:"JuliaMono","SFMono-Regular","Menlo","Consolas","Liberation Mono","DejaVu Sans Mono",monospace !important}.is-block{display:block !important}@media screen and (max-width: 768px){.is-block-mobile{display:block !important}}@media screen and (min-width: 769px),print{.is-block-tablet{display:block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-block-tablet-only{display:block !important}}@media screen and (max-width: 1055px){.is-block-touch{display:block !important}}@media screen and (min-width: 1056px){.is-block-desktop{display:block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-block-desktop-only{display:block !important}}@media screen and (min-width: 1216px){.is-block-widescreen{display:block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-block-widescreen-only{display:block !important}}@media screen and (min-width: 1408px){.is-block-fullhd{display:block !important}}.is-flex{display:flex !important}@media screen and (max-width: 768px){.is-flex-mobile{display:flex !important}}@media screen and (min-width: 769px),print{.is-flex-tablet{display:flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-flex-tablet-only{display:flex !important}}@media screen and (max-width: 1055px){.is-flex-touch{display:flex !important}}@media screen and (min-width: 1056px){.is-flex-desktop{display:flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-flex-desktop-only{display:flex !important}}@media screen and (min-width: 1216px){.is-flex-widescreen{display:flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-flex-widescreen-only{display:flex !important}}@media screen and (min-width: 1408px){.is-flex-fullhd{display:flex !important}}.is-inline{display:inline !important}@media screen and (max-width: 768px){.is-inline-mobile{display:inline !important}}@media screen and (min-width: 769px),print{.is-inline-tablet{display:inline !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-tablet-only{display:inline !important}}@media screen and (max-width: 1055px){.is-inline-touch{display:inline !important}}@media screen and (min-width: 1056px){.is-inline-desktop{display:inline !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-desktop-only{display:inline !important}}@media screen and (min-width: 1216px){.is-inline-widescreen{display:inline !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-widescreen-only{display:inline !important}}@media screen and (min-width: 1408px){.is-inline-fullhd{display:inline !important}}.is-inline-block{display:inline-block !important}@media screen and (max-width: 768px){.is-inline-block-mobile{display:inline-block !important}}@media screen and (min-width: 769px),print{.is-inline-block-tablet{display:inline-block !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-block-tablet-only{display:inline-block !important}}@media screen and (max-width: 1055px){.is-inline-block-touch{display:inline-block !important}}@media screen and (min-width: 1056px){.is-inline-block-desktop{display:inline-block !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-block-desktop-only{display:inline-block !important}}@media screen and (min-width: 1216px){.is-inline-block-widescreen{display:inline-block !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-block-widescreen-only{display:inline-block !important}}@media screen and (min-width: 1408px){.is-inline-block-fullhd{display:inline-block !important}}.is-inline-flex{display:inline-flex !important}@media screen and (max-width: 768px){.is-inline-flex-mobile{display:inline-flex !important}}@media screen and (min-width: 769px),print{.is-inline-flex-tablet{display:inline-flex !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-inline-flex-tablet-only{display:inline-flex !important}}@media screen and (max-width: 1055px){.is-inline-flex-touch{display:inline-flex !important}}@media screen and (min-width: 1056px){.is-inline-flex-desktop{display:inline-flex !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-inline-flex-desktop-only{display:inline-flex !important}}@media screen and (min-width: 1216px){.is-inline-flex-widescreen{display:inline-flex !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-inline-flex-widescreen-only{display:inline-flex !important}}@media screen and (min-width: 1408px){.is-inline-flex-fullhd{display:inline-flex !important}}.is-hidden{display:none !important}.is-sr-only{border:none !important;clip:rect(0, 0, 0, 0) !important;height:0.01em !important;overflow:hidden !important;padding:0 !important;position:absolute !important;white-space:nowrap !important;width:0.01em !important}@media screen and (max-width: 768px){.is-hidden-mobile{display:none !important}}@media screen and (min-width: 769px),print{.is-hidden-tablet{display:none !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-hidden-tablet-only{display:none !important}}@media screen and (max-width: 1055px){.is-hidden-touch{display:none !important}}@media screen and (min-width: 1056px){.is-hidden-desktop{display:none !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-hidden-desktop-only{display:none !important}}@media screen and (min-width: 1216px){.is-hidden-widescreen{display:none !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-hidden-widescreen-only{display:none !important}}@media screen and (min-width: 1408px){.is-hidden-fullhd{display:none !important}}.is-invisible{visibility:hidden !important}@media screen and (max-width: 768px){.is-invisible-mobile{visibility:hidden !important}}@media screen and (min-width: 769px),print{.is-invisible-tablet{visibility:hidden !important}}@media screen and (min-width: 769px) and (max-width: 1055px){.is-invisible-tablet-only{visibility:hidden !important}}@media screen and (max-width: 1055px){.is-invisible-touch{visibility:hidden !important}}@media screen and (min-width: 1056px){.is-invisible-desktop{visibility:hidden !important}}@media screen and (min-width: 1056px) and (max-width: 1215px){.is-invisible-desktop-only{visibility:hidden !important}}@media screen and (min-width: 1216px){.is-invisible-widescreen{visibility:hidden !important}}@media screen and (min-width: 1216px) and (max-width: 1407px){.is-invisible-widescreen-only{visibility:hidden !important}}@media screen and (min-width: 1408px){.is-invisible-fullhd{visibility:hidden !important}}.is-marginless{margin:0 !important}.is-paddingless{padding:0 !important}.is-radiusless{border-radius:0 !important}.is-shadowless{box-shadow:none !important}.is-relative{position:relative !important}.box{background-color:#fff;border-radius:6px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#222;display:block;padding:1.25rem}a.box:hover,a.box:focus{box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px #2e63b8}a.box:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2),0 0 0 1px #2e63b8}.button{background-color:#fff;border-color:#dbdbdb;border-width:1px;color:#363636;cursor:pointer;justify-content:center;padding-bottom:calc(0.375em - 1px);padding-left:.75em;padding-right:.75em;padding-top:calc(0.375em - 1px);text-align:center;white-space:nowrap}.button strong{color:inherit}.button .icon,.button .icon.is-small,.button #documenter .docs-sidebar form.docs-search>input.icon,#documenter .docs-sidebar .button form.docs-search>input.icon,.button .icon.is-medium,.button .icon.is-large{height:1.5em;width:1.5em}.button .icon:first-child:not(:last-child){margin-left:calc(-0.375em - 1px);margin-right:0.1875em}.button .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:calc(-0.375em - 1px)}.button .icon:first-child:last-child{margin-left:calc(-0.375em - 1px);margin-right:calc(-0.375em - 1px)}.button:hover,.button.is-hovered{border-color:#b5b5b5;color:#363636}.button:focus,.button.is-focused{border-color:#3c5dcd;color:#363636}.button:focus:not(:active),.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button:active,.button.is-active{border-color:#4a4a4a;color:#363636}.button.is-text{background-color:transparent;border-color:transparent;color:#222;text-decoration:underline}.button.is-text:hover,.button.is-text.is-hovered,.button.is-text:focus,.button.is-text.is-focused{background-color:#f5f5f5;color:#222}.button.is-text:active,.button.is-text.is-active{background-color:#e8e8e8;color:#222}.button.is-text[disabled],fieldset[disabled] .button.is-text{background-color:transparent;border-color:transparent;box-shadow:none}.button.is-white{background-color:#fff;border-color:transparent;color:#0a0a0a}.button.is-white:hover,.button.is-white.is-hovered{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.button.is-white:focus,.button.is-white.is-focused{border-color:transparent;color:#0a0a0a}.button.is-white:focus:not(:active),.button.is-white.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.button.is-white:active,.button.is-white.is-active{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.button.is-white[disabled],fieldset[disabled] .button.is-white{background-color:#fff;border-color:transparent;box-shadow:none}.button.is-white.is-inverted{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted:hover,.button.is-white.is-inverted.is-hovered{background-color:#000}.button.is-white.is-inverted[disabled],fieldset[disabled] .button.is-white.is-inverted{background-color:#0a0a0a;border-color:transparent;box-shadow:none;color:#fff}.button.is-white.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-white.is-outlined:hover,.button.is-white.is-outlined.is-hovered,.button.is-white.is-outlined:focus,.button.is-white.is-outlined.is-focused{background-color:#fff;border-color:#fff;color:#0a0a0a}.button.is-white.is-outlined.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-outlined.is-loading:hover::after,.button.is-white.is-outlined.is-loading.is-hovered::after,.button.is-white.is-outlined.is-loading:focus::after,.button.is-white.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-white.is-outlined[disabled],fieldset[disabled] .button.is-white.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-white.is-inverted.is-outlined:hover,.button.is-white.is-inverted.is-outlined.is-hovered,.button.is-white.is-inverted.is-outlined:focus,.button.is-white.is-inverted.is-outlined.is-focused{background-color:#0a0a0a;color:#fff}.button.is-white.is-inverted.is-outlined.is-loading:hover::after,.button.is-white.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-white.is-inverted.is-outlined.is-loading:focus::after,.button.is-white.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-white.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-white.is-inverted.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black{background-color:#0a0a0a;border-color:transparent;color:#fff}.button.is-black:hover,.button.is-black.is-hovered{background-color:#040404;border-color:transparent;color:#fff}.button.is-black:focus,.button.is-black.is-focused{border-color:transparent;color:#fff}.button.is-black:focus:not(:active),.button.is-black.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.button.is-black:active,.button.is-black.is-active{background-color:#000;border-color:transparent;color:#fff}.button.is-black[disabled],fieldset[disabled] .button.is-black{background-color:#0a0a0a;border-color:transparent;box-shadow:none}.button.is-black.is-inverted{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted:hover,.button.is-black.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-black.is-inverted[disabled],fieldset[disabled] .button.is-black.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#0a0a0a}.button.is-black.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;color:#0a0a0a}.button.is-black.is-outlined:hover,.button.is-black.is-outlined.is-hovered,.button.is-black.is-outlined:focus,.button.is-black.is-outlined.is-focused{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.button.is-black.is-outlined.is-loading::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-outlined.is-loading:hover::after,.button.is-black.is-outlined.is-loading.is-hovered::after,.button.is-black.is-outlined.is-loading:focus::after,.button.is-black.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-black.is-outlined[disabled],fieldset[disabled] .button.is-black.is-outlined{background-color:transparent;border-color:#0a0a0a;box-shadow:none;color:#0a0a0a}.button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-black.is-inverted.is-outlined:hover,.button.is-black.is-inverted.is-outlined.is-hovered,.button.is-black.is-inverted.is-outlined:focus,.button.is-black.is-inverted.is-outlined.is-focused{background-color:#fff;color:#0a0a0a}.button.is-black.is-inverted.is-outlined.is-loading:hover::after,.button.is-black.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-black.is-inverted.is-outlined.is-loading:focus::after,.button.is-black.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #0a0a0a #0a0a0a !important}.button.is-black.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-black.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-light{background-color:#f5f5f5;border-color:transparent;color:#363636}.button.is-light:hover,.button.is-light.is-hovered{background-color:#eee;border-color:transparent;color:#363636}.button.is-light:focus,.button.is-light.is-focused{border-color:transparent;color:#363636}.button.is-light:focus:not(:active),.button.is-light.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.button.is-light:active,.button.is-light.is-active{background-color:#e8e8e8;border-color:transparent;color:#363636}.button.is-light[disabled],fieldset[disabled] .button.is-light{background-color:#f5f5f5;border-color:transparent;box-shadow:none}.button.is-light.is-inverted{background-color:#363636;color:#f5f5f5}.button.is-light.is-inverted:hover,.button.is-light.is-inverted.is-hovered{background-color:#292929}.button.is-light.is-inverted[disabled],fieldset[disabled] .button.is-light.is-inverted{background-color:#363636;border-color:transparent;box-shadow:none;color:#f5f5f5}.button.is-light.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-light.is-outlined:hover,.button.is-light.is-outlined.is-hovered,.button.is-light.is-outlined:focus,.button.is-light.is-outlined.is-focused{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.button.is-light.is-outlined.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-outlined.is-loading:hover::after,.button.is-light.is-outlined.is-loading.is-hovered::after,.button.is-light.is-outlined.is-loading:focus::after,.button.is-light.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-light.is-outlined[disabled],fieldset[disabled] .button.is-light.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-light.is-inverted.is-outlined:hover,.button.is-light.is-inverted.is-outlined.is-hovered,.button.is-light.is-inverted.is-outlined:focus,.button.is-light.is-inverted.is-outlined.is-focused{background-color:#363636;color:#f5f5f5}.button.is-light.is-inverted.is-outlined.is-loading:hover::after,.button.is-light.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-light.is-inverted.is-outlined.is-loading:focus::after,.button.is-light.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-light.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-light.is-inverted.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark,.content kbd.button{background-color:#363636;border-color:transparent;color:#f5f5f5}.button.is-dark:hover,.content kbd.button:hover,.button.is-dark.is-hovered,.content kbd.button.is-hovered{background-color:#2f2f2f;border-color:transparent;color:#f5f5f5}.button.is-dark:focus,.content kbd.button:focus,.button.is-dark.is-focused,.content kbd.button.is-focused{border-color:transparent;color:#f5f5f5}.button.is-dark:focus:not(:active),.content kbd.button:focus:not(:active),.button.is-dark.is-focused:not(:active),.content kbd.button.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.button.is-dark:active,.content kbd.button:active,.button.is-dark.is-active,.content kbd.button.is-active{background-color:#292929;border-color:transparent;color:#f5f5f5}.button.is-dark[disabled],.content kbd.button[disabled],fieldset[disabled] .button.is-dark,fieldset[disabled] .content kbd.button,.content fieldset[disabled] kbd.button{background-color:#363636;border-color:transparent;box-shadow:none}.button.is-dark.is-inverted,.content kbd.button.is-inverted{background-color:#f5f5f5;color:#363636}.button.is-dark.is-inverted:hover,.content kbd.button.is-inverted:hover,.button.is-dark.is-inverted.is-hovered,.content kbd.button.is-inverted.is-hovered{background-color:#e8e8e8}.button.is-dark.is-inverted[disabled],.content kbd.button.is-inverted[disabled],fieldset[disabled] .button.is-dark.is-inverted,fieldset[disabled] .content kbd.button.is-inverted,.content fieldset[disabled] kbd.button.is-inverted{background-color:#f5f5f5;border-color:transparent;box-shadow:none;color:#363636}.button.is-dark.is-loading::after,.content kbd.button.is-loading::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-dark.is-outlined,.content kbd.button.is-outlined{background-color:transparent;border-color:#363636;color:#363636}.button.is-dark.is-outlined:hover,.content kbd.button.is-outlined:hover,.button.is-dark.is-outlined.is-hovered,.content kbd.button.is-outlined.is-hovered,.button.is-dark.is-outlined:focus,.content kbd.button.is-outlined:focus,.button.is-dark.is-outlined.is-focused,.content kbd.button.is-outlined.is-focused{background-color:#363636;border-color:#363636;color:#f5f5f5}.button.is-dark.is-outlined.is-loading::after,.content kbd.button.is-outlined.is-loading::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-outlined.is-loading:hover::after,.content kbd.button.is-outlined.is-loading:hover::after,.button.is-dark.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-outlined.is-loading:focus::after,.content kbd.button.is-outlined.is-loading:focus::after,.button.is-dark.is-outlined.is-loading.is-focused::after,.content kbd.button.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #f5f5f5 #f5f5f5 !important}.button.is-dark.is-outlined[disabled],.content kbd.button.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-outlined,fieldset[disabled] .content kbd.button.is-outlined,.content fieldset[disabled] kbd.button.is-outlined{background-color:transparent;border-color:#363636;box-shadow:none;color:#363636}.button.is-dark.is-inverted.is-outlined,.content kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#f5f5f5;color:#f5f5f5}.button.is-dark.is-inverted.is-outlined:hover,.content kbd.button.is-inverted.is-outlined:hover,.button.is-dark.is-inverted.is-outlined.is-hovered,.content kbd.button.is-inverted.is-outlined.is-hovered,.button.is-dark.is-inverted.is-outlined:focus,.content kbd.button.is-inverted.is-outlined:focus,.button.is-dark.is-inverted.is-outlined.is-focused,.content kbd.button.is-inverted.is-outlined.is-focused{background-color:#f5f5f5;color:#363636}.button.is-dark.is-inverted.is-outlined.is-loading:hover::after,.content kbd.button.is-inverted.is-outlined.is-loading:hover::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-hovered::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-dark.is-inverted.is-outlined.is-loading:focus::after,.content kbd.button.is-inverted.is-outlined.is-loading:focus::after,.button.is-dark.is-inverted.is-outlined.is-loading.is-focused::after,.content kbd.button.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #363636 #363636 !important}.button.is-dark.is-inverted.is-outlined[disabled],.content kbd.button.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-dark.is-inverted.is-outlined,fieldset[disabled] .content kbd.button.is-inverted.is-outlined,.content fieldset[disabled] kbd.button.is-inverted.is-outlined{background-color:transparent;border-color:#f5f5f5;box-shadow:none;color:#f5f5f5}.button.is-primary,.docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;color:#fff}.button.is-primary:hover,.docstring>section>a.button.docs-sourcelink:hover,.button.is-primary.is-hovered,.docstring>section>a.button.is-hovered.docs-sourcelink{background-color:#43b1dc;border-color:transparent;color:#fff}.button.is-primary:focus,.docstring>section>a.button.docs-sourcelink:focus,.button.is-primary.is-focused,.docstring>section>a.button.is-focused.docs-sourcelink{border-color:transparent;color:#fff}.button.is-primary:focus:not(:active),.docstring>section>a.button.docs-sourcelink:focus:not(:active),.button.is-primary.is-focused:not(:active),.docstring>section>a.button.is-focused.docs-sourcelink:not(:active){box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.button.is-primary:active,.docstring>section>a.button.docs-sourcelink:active,.button.is-primary.is-active,.docstring>section>a.button.is-active.docs-sourcelink{background-color:#39acda;border-color:transparent;color:#fff}.button.is-primary[disabled],.docstring>section>a.button.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary,fieldset[disabled] .docstring>section>a.button.docs-sourcelink{background-color:#4eb5de;border-color:transparent;box-shadow:none}.button.is-primary.is-inverted,.docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted:hover,.docstring>section>a.button.is-inverted.docs-sourcelink:hover,.button.is-primary.is-inverted.is-hovered,.docstring>section>a.button.is-inverted.is-hovered.docs-sourcelink{background-color:#f2f2f2}.button.is-primary.is-inverted[disabled],.docstring>section>a.button.is-inverted.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted,fieldset[disabled] .docstring>section>a.button.is-inverted.docs-sourcelink{background-color:#fff;border-color:transparent;box-shadow:none;color:#4eb5de}.button.is-primary.is-loading::after,.docstring>section>a.button.is-loading.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined,.docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;color:#4eb5de}.button.is-primary.is-outlined:hover,.docstring>section>a.button.is-outlined.docs-sourcelink:hover,.button.is-primary.is-outlined.is-hovered,.docstring>section>a.button.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-outlined:focus,.docstring>section>a.button.is-outlined.docs-sourcelink:focus,.button.is-primary.is-outlined.is-focused,.docstring>section>a.button.is-outlined.is-focused.docs-sourcelink{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.button.is-primary.is-outlined.is-loading::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #fff #fff !important}.button.is-primary.is-outlined[disabled],.docstring>section>a.button.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-outlined,fieldset[disabled] .docstring>section>a.button.is-outlined.docs-sourcelink{background-color:transparent;border-color:#4eb5de;box-shadow:none;color:#4eb5de}.button.is-primary.is-inverted.is-outlined,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;color:#fff}.button.is-primary.is-inverted.is-outlined:hover,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:hover,.button.is-primary.is-inverted.is-outlined.is-hovered,.docstring>section>a.button.is-inverted.is-outlined.is-hovered.docs-sourcelink,.button.is-primary.is-inverted.is-outlined:focus,.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink:focus,.button.is-primary.is-inverted.is-outlined.is-focused,.docstring>section>a.button.is-inverted.is-outlined.is-focused.docs-sourcelink{background-color:#fff;color:#4eb5de}.button.is-primary.is-inverted.is-outlined.is-loading:hover::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:hover::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-hovered::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-hovered.docs-sourcelink::after,.button.is-primary.is-inverted.is-outlined.is-loading:focus::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.docs-sourcelink:focus::after,.button.is-primary.is-inverted.is-outlined.is-loading.is-focused::after,.docstring>section>a.button.is-inverted.is-outlined.is-loading.is-focused.docs-sourcelink::after{border-color:transparent transparent #4eb5de #4eb5de !important}.button.is-primary.is-inverted.is-outlined[disabled],.docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink[disabled],fieldset[disabled] .button.is-primary.is-inverted.is-outlined,fieldset[disabled] .docstring>section>a.button.is-inverted.is-outlined.docs-sourcelink{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-link{background-color:#2e63b8;border-color:transparent;color:#fff}.button.is-link:hover,.button.is-link.is-hovered{background-color:#2b5eae;border-color:transparent;color:#fff}.button.is-link:focus,.button.is-link.is-focused{border-color:transparent;color:#fff}.button.is-link:focus:not(:active),.button.is-link.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.button.is-link:active,.button.is-link.is-active{background-color:#2958a4;border-color:transparent;color:#fff}.button.is-link[disabled],fieldset[disabled] .button.is-link{background-color:#2e63b8;border-color:transparent;box-shadow:none}.button.is-link.is-inverted{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted:hover,.button.is-link.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-link.is-inverted[disabled],fieldset[disabled] .button.is-link.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#2e63b8}.button.is-link.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;color:#2e63b8}.button.is-link.is-outlined:hover,.button.is-link.is-outlined.is-hovered,.button.is-link.is-outlined:focus,.button.is-link.is-outlined.is-focused{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.button.is-link.is-outlined.is-loading::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-outlined.is-loading:hover::after,.button.is-link.is-outlined.is-loading.is-hovered::after,.button.is-link.is-outlined.is-loading:focus::after,.button.is-link.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-link.is-outlined[disabled],fieldset[disabled] .button.is-link.is-outlined{background-color:transparent;border-color:#2e63b8;box-shadow:none;color:#2e63b8}.button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-link.is-inverted.is-outlined:hover,.button.is-link.is-inverted.is-outlined.is-hovered,.button.is-link.is-inverted.is-outlined:focus,.button.is-link.is-inverted.is-outlined.is-focused{background-color:#fff;color:#2e63b8}.button.is-link.is-inverted.is-outlined.is-loading:hover::after,.button.is-link.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-link.is-inverted.is-outlined.is-loading:focus::after,.button.is-link.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #2e63b8 #2e63b8 !important}.button.is-link.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-link.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-info{background-color:#209cee;border-color:transparent;color:#fff}.button.is-info:hover,.button.is-info.is-hovered{background-color:#1497ed;border-color:transparent;color:#fff}.button.is-info:focus,.button.is-info.is-focused{border-color:transparent;color:#fff}.button.is-info:focus:not(:active),.button.is-info.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.button.is-info:active,.button.is-info.is-active{background-color:#1190e3;border-color:transparent;color:#fff}.button.is-info[disabled],fieldset[disabled] .button.is-info{background-color:#209cee;border-color:transparent;box-shadow:none}.button.is-info.is-inverted{background-color:#fff;color:#209cee}.button.is-info.is-inverted:hover,.button.is-info.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-info.is-inverted[disabled],fieldset[disabled] .button.is-info.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#209cee}.button.is-info.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined{background-color:transparent;border-color:#209cee;color:#209cee}.button.is-info.is-outlined:hover,.button.is-info.is-outlined.is-hovered,.button.is-info.is-outlined:focus,.button.is-info.is-outlined.is-focused{background-color:#209cee;border-color:#209cee;color:#fff}.button.is-info.is-outlined.is-loading::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-outlined.is-loading:hover::after,.button.is-info.is-outlined.is-loading.is-hovered::after,.button.is-info.is-outlined.is-loading:focus::after,.button.is-info.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-info.is-outlined[disabled],fieldset[disabled] .button.is-info.is-outlined{background-color:transparent;border-color:#209cee;box-shadow:none;color:#209cee}.button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-info.is-inverted.is-outlined:hover,.button.is-info.is-inverted.is-outlined.is-hovered,.button.is-info.is-inverted.is-outlined:focus,.button.is-info.is-inverted.is-outlined.is-focused{background-color:#fff;color:#209cee}.button.is-info.is-inverted.is-outlined.is-loading:hover::after,.button.is-info.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-info.is-inverted.is-outlined.is-loading:focus::after,.button.is-info.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #209cee #209cee !important}.button.is-info.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-info.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-success{background-color:#22c35b;border-color:transparent;color:#fff}.button.is-success:hover,.button.is-success.is-hovered{background-color:#20b856;border-color:transparent;color:#fff}.button.is-success:focus,.button.is-success.is-focused{border-color:transparent;color:#fff}.button.is-success:focus:not(:active),.button.is-success.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.button.is-success:active,.button.is-success.is-active{background-color:#1ead51;border-color:transparent;color:#fff}.button.is-success[disabled],fieldset[disabled] .button.is-success{background-color:#22c35b;border-color:transparent;box-shadow:none}.button.is-success.is-inverted{background-color:#fff;color:#22c35b}.button.is-success.is-inverted:hover,.button.is-success.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-success.is-inverted[disabled],fieldset[disabled] .button.is-success.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#22c35b}.button.is-success.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;color:#22c35b}.button.is-success.is-outlined:hover,.button.is-success.is-outlined.is-hovered,.button.is-success.is-outlined:focus,.button.is-success.is-outlined.is-focused{background-color:#22c35b;border-color:#22c35b;color:#fff}.button.is-success.is-outlined.is-loading::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-outlined.is-loading:hover::after,.button.is-success.is-outlined.is-loading.is-hovered::after,.button.is-success.is-outlined.is-loading:focus::after,.button.is-success.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-success.is-outlined[disabled],fieldset[disabled] .button.is-success.is-outlined{background-color:transparent;border-color:#22c35b;box-shadow:none;color:#22c35b}.button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-success.is-inverted.is-outlined:hover,.button.is-success.is-inverted.is-outlined.is-hovered,.button.is-success.is-inverted.is-outlined:focus,.button.is-success.is-inverted.is-outlined.is-focused{background-color:#fff;color:#22c35b}.button.is-success.is-inverted.is-outlined.is-loading:hover::after,.button.is-success.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-success.is-inverted.is-outlined.is-loading:focus::after,.button.is-success.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #22c35b #22c35b !important}.button.is-success.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-success.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-warning{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:hover,.button.is-warning.is-hovered{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus,.button.is-warning.is-focused{border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning:focus:not(:active),.button.is-warning.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.button.is-warning:active,.button.is-warning.is-active{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.button.is-warning[disabled],fieldset[disabled] .button.is-warning{background-color:#ffdd57;border-color:transparent;box-shadow:none}.button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted:hover,.button.is-warning.is-inverted.is-hovered{background-color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted[disabled],fieldset[disabled] .button.is-warning.is-inverted{background-color:rgba(0,0,0,0.7);border-color:transparent;box-shadow:none;color:#ffdd57}.button.is-warning.is-loading::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;color:#ffdd57}.button.is-warning.is-outlined:hover,.button.is-warning.is-outlined.is-hovered,.button.is-warning.is-outlined:focus,.button.is-warning.is-outlined.is-focused{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.button.is-warning.is-outlined.is-loading::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-outlined.is-loading:hover::after,.button.is-warning.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-outlined.is-loading:focus::after,.button.is-warning.is-outlined.is-loading.is-focused::after{border-color:transparent transparent rgba(0,0,0,0.7) rgba(0,0,0,0.7) !important}.button.is-warning.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-outlined{background-color:transparent;border-color:#ffdd57;box-shadow:none;color:#ffdd57}.button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);color:rgba(0,0,0,0.7)}.button.is-warning.is-inverted.is-outlined:hover,.button.is-warning.is-inverted.is-outlined.is-hovered,.button.is-warning.is-inverted.is-outlined:focus,.button.is-warning.is-inverted.is-outlined.is-focused{background-color:rgba(0,0,0,0.7);color:#ffdd57}.button.is-warning.is-inverted.is-outlined.is-loading:hover::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-warning.is-inverted.is-outlined.is-loading:focus::after,.button.is-warning.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #ffdd57 #ffdd57 !important}.button.is-warning.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-warning.is-inverted.is-outlined{background-color:transparent;border-color:rgba(0,0,0,0.7);box-shadow:none;color:rgba(0,0,0,0.7)}.button.is-danger{background-color:#da0b00;border-color:transparent;color:#fff}.button.is-danger:hover,.button.is-danger.is-hovered{background-color:#cd0a00;border-color:transparent;color:#fff}.button.is-danger:focus,.button.is-danger.is-focused{border-color:transparent;color:#fff}.button.is-danger:focus:not(:active),.button.is-danger.is-focused:not(:active){box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.button.is-danger:active,.button.is-danger.is-active{background-color:#c10a00;border-color:transparent;color:#fff}.button.is-danger[disabled],fieldset[disabled] .button.is-danger{background-color:#da0b00;border-color:transparent;box-shadow:none}.button.is-danger.is-inverted{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted:hover,.button.is-danger.is-inverted.is-hovered{background-color:#f2f2f2}.button.is-danger.is-inverted[disabled],fieldset[disabled] .button.is-danger.is-inverted{background-color:#fff;border-color:transparent;box-shadow:none;color:#da0b00}.button.is-danger.is-loading::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;color:#da0b00}.button.is-danger.is-outlined:hover,.button.is-danger.is-outlined.is-hovered,.button.is-danger.is-outlined:focus,.button.is-danger.is-outlined.is-focused{background-color:#da0b00;border-color:#da0b00;color:#fff}.button.is-danger.is-outlined.is-loading::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-outlined.is-loading:hover::after,.button.is-danger.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-outlined.is-loading:focus::after,.button.is-danger.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #fff #fff !important}.button.is-danger.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-outlined{background-color:transparent;border-color:#da0b00;box-shadow:none;color:#da0b00}.button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;color:#fff}.button.is-danger.is-inverted.is-outlined:hover,.button.is-danger.is-inverted.is-outlined.is-hovered,.button.is-danger.is-inverted.is-outlined:focus,.button.is-danger.is-inverted.is-outlined.is-focused{background-color:#fff;color:#da0b00}.button.is-danger.is-inverted.is-outlined.is-loading:hover::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-hovered::after,.button.is-danger.is-inverted.is-outlined.is-loading:focus::after,.button.is-danger.is-inverted.is-outlined.is-loading.is-focused::after{border-color:transparent transparent #da0b00 #da0b00 !important}.button.is-danger.is-inverted.is-outlined[disabled],fieldset[disabled] .button.is-danger.is-inverted.is-outlined{background-color:transparent;border-color:#fff;box-shadow:none;color:#fff}.button.is-small,#documenter .docs-sidebar form.docs-search>input.button{border-radius:2px;font-size:.75rem}.button.is-normal{font-size:1rem}.button.is-medium{font-size:1.25rem}.button.is-large{font-size:1.5rem}.button[disabled],fieldset[disabled] .button{background-color:#fff;border-color:#dbdbdb;box-shadow:none;opacity:.5}.button.is-fullwidth{display:flex;width:100%}.button.is-loading{color:transparent !important;pointer-events:none}.button.is-loading::after{position:absolute;left:calc(50% - (1em / 2));top:calc(50% - (1em / 2));position:absolute !important}.button.is-static{background-color:#f5f5f5;border-color:#dbdbdb;color:#6b6b6b;box-shadow:none;pointer-events:none}.button.is-rounded,#documenter .docs-sidebar form.docs-search>input.button{border-radius:290486px;padding-left:1em;padding-right:1em}.buttons{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.buttons .button{margin-bottom:0.5rem}.buttons .button:not(:last-child):not(.is-fullwidth){margin-right:0.5rem}.buttons:last-child{margin-bottom:-0.5rem}.buttons:not(:last-child){margin-bottom:1rem}.buttons.are-small .button:not(.is-normal):not(.is-medium):not(.is-large){border-radius:2px;font-size:.75rem}.buttons.are-medium .button:not(.is-small):not(.is-normal):not(.is-large){font-size:1.25rem}.buttons.are-large .button:not(.is-small):not(.is-normal):not(.is-medium){font-size:1.5rem}.buttons.has-addons .button:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.buttons.has-addons .button:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:-1px}.buttons.has-addons .button:last-child{margin-right:0}.buttons.has-addons .button:hover,.buttons.has-addons .button.is-hovered{z-index:2}.buttons.has-addons .button:focus,.buttons.has-addons .button.is-focused,.buttons.has-addons .button:active,.buttons.has-addons .button.is-active,.buttons.has-addons .button.is-selected{z-index:3}.buttons.has-addons .button:focus:hover,.buttons.has-addons .button.is-focused:hover,.buttons.has-addons .button:active:hover,.buttons.has-addons .button.is-active:hover,.buttons.has-addons .button.is-selected:hover{z-index:4}.buttons.has-addons .button.is-expanded{flex-grow:1;flex-shrink:1}.buttons.is-centered{justify-content:center}.buttons.is-centered:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.buttons.is-right{justify-content:flex-end}.buttons.is-right:not(.has-addons) .button:not(.is-fullwidth){margin-left:0.25rem;margin-right:0.25rem}.container{flex-grow:1;margin:0 auto;position:relative;width:auto}@media screen and (min-width: 1056px){.container{max-width:992px}.container.is-fluid{margin-left:32px;margin-right:32px;max-width:none}}@media screen and (max-width: 1215px){.container.is-widescreen{max-width:1152px}}@media screen and (max-width: 1407px){.container.is-fullhd{max-width:1344px}}@media screen and (min-width: 1216px){.container{max-width:1152px}}@media screen and (min-width: 1408px){.container{max-width:1344px}}.content li+li{margin-top:0.25em}.content p:not(:last-child),.content dl:not(:last-child),.content ol:not(:last-child),.content ul:not(:last-child),.content blockquote:not(:last-child),.content pre:not(:last-child),.content table:not(:last-child){margin-bottom:1em}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{color:#222;font-weight:600;line-height:1.125}.content h1{font-size:2em;margin-bottom:0.5em}.content h1:not(:first-child){margin-top:1em}.content h2{font-size:1.75em;margin-bottom:0.5714em}.content h2:not(:first-child){margin-top:1.1428em}.content h3{font-size:1.5em;margin-bottom:0.6666em}.content h3:not(:first-child){margin-top:1.3333em}.content h4{font-size:1.25em;margin-bottom:0.8em}.content h5{font-size:1.125em;margin-bottom:0.8888em}.content h6{font-size:1em;margin-bottom:1em}.content blockquote{background-color:#f5f5f5;border-left:5px solid #dbdbdb;padding:1.25em 1.5em}.content ol{list-style-position:outside;margin-left:2em;margin-top:1em}.content ol:not([type]){list-style-type:decimal}.content ol.is-lower-alpha:not([type]){list-style-type:lower-alpha}.content ol.is-lower-roman:not([type]){list-style-type:lower-roman}.content ol.is-upper-alpha:not([type]){list-style-type:upper-alpha}.content ol.is-upper-roman:not([type]){list-style-type:upper-roman}.content ul{list-style:disc outside;margin-left:2em;margin-top:1em}.content ul ul{list-style-type:circle;margin-top:0.5em}.content ul ul ul{list-style-type:square}.content dd{margin-left:2em}.content figure{margin-left:2em;margin-right:2em;text-align:center}.content figure:not(:first-child){margin-top:2em}.content figure:not(:last-child){margin-bottom:2em}.content figure img{display:inline-block}.content figure figcaption{font-style:italic}.content pre{-webkit-overflow-scrolling:touch;overflow-x:auto;padding:0;white-space:pre;word-wrap:normal}.content sup,.content sub{font-size:75%}.content table{width:100%}.content table td,.content table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.content table th{color:#222}.content table th:not([align]){text-align:left}.content table thead td,.content table thead th{border-width:0 0 2px;color:#222}.content table tfoot td,.content table tfoot th{border-width:2px 0 0;color:#222}.content table tbody tr:last-child td,.content table tbody tr:last-child th{border-bottom-width:0}.content .tabs li+li{margin-top:0}.content.is-small,#documenter .docs-sidebar form.docs-search>input.content{font-size:.75rem}.content.is-medium{font-size:1.25rem}.content.is-large{font-size:1.5rem}.icon{align-items:center;display:inline-flex;justify-content:center;height:1.5rem;width:1.5rem}.icon.is-small,#documenter .docs-sidebar form.docs-search>input.icon{height:1rem;width:1rem}.icon.is-medium{height:2rem;width:2rem}.icon.is-large{height:3rem;width:3rem}.image,#documenter .docs-sidebar .docs-logo>img{display:block;position:relative}.image img,#documenter .docs-sidebar .docs-logo>img img{display:block;height:auto;width:100%}.image img.is-rounded,#documenter .docs-sidebar .docs-logo>img img.is-rounded{border-radius:290486px}.image.is-square img,#documenter .docs-sidebar .docs-logo>img.is-square img,.image.is-square .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-square .has-ratio,.image.is-1by1 img,#documenter .docs-sidebar .docs-logo>img.is-1by1 img,.image.is-1by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by1 .has-ratio,.image.is-5by4 img,#documenter .docs-sidebar .docs-logo>img.is-5by4 img,.image.is-5by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by4 .has-ratio,.image.is-4by3 img,#documenter .docs-sidebar .docs-logo>img.is-4by3 img,.image.is-4by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by3 .has-ratio,.image.is-3by2 img,#documenter .docs-sidebar .docs-logo>img.is-3by2 img,.image.is-3by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by2 .has-ratio,.image.is-5by3 img,#documenter .docs-sidebar .docs-logo>img.is-5by3 img,.image.is-5by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-5by3 .has-ratio,.image.is-16by9 img,#documenter .docs-sidebar .docs-logo>img.is-16by9 img,.image.is-16by9 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-16by9 .has-ratio,.image.is-2by1 img,#documenter .docs-sidebar .docs-logo>img.is-2by1 img,.image.is-2by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by1 .has-ratio,.image.is-3by1 img,#documenter .docs-sidebar .docs-logo>img.is-3by1 img,.image.is-3by1 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by1 .has-ratio,.image.is-4by5 img,#documenter .docs-sidebar .docs-logo>img.is-4by5 img,.image.is-4by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-4by5 .has-ratio,.image.is-3by4 img,#documenter .docs-sidebar .docs-logo>img.is-3by4 img,.image.is-3by4 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by4 .has-ratio,.image.is-2by3 img,#documenter .docs-sidebar .docs-logo>img.is-2by3 img,.image.is-2by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-2by3 .has-ratio,.image.is-3by5 img,#documenter .docs-sidebar .docs-logo>img.is-3by5 img,.image.is-3by5 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-3by5 .has-ratio,.image.is-9by16 img,#documenter .docs-sidebar .docs-logo>img.is-9by16 img,.image.is-9by16 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-9by16 .has-ratio,.image.is-1by2 img,#documenter .docs-sidebar .docs-logo>img.is-1by2 img,.image.is-1by2 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by2 .has-ratio,.image.is-1by3 img,#documenter .docs-sidebar .docs-logo>img.is-1by3 img,.image.is-1by3 .has-ratio,#documenter .docs-sidebar .docs-logo>img.is-1by3 .has-ratio{height:100%;width:100%}.image.is-square,#documenter .docs-sidebar .docs-logo>img.is-square,.image.is-1by1,#documenter .docs-sidebar .docs-logo>img.is-1by1{padding-top:100%}.image.is-5by4,#documenter .docs-sidebar .docs-logo>img.is-5by4{padding-top:80%}.image.is-4by3,#documenter .docs-sidebar .docs-logo>img.is-4by3{padding-top:75%}.image.is-3by2,#documenter .docs-sidebar .docs-logo>img.is-3by2{padding-top:66.6666%}.image.is-5by3,#documenter .docs-sidebar .docs-logo>img.is-5by3{padding-top:60%}.image.is-16by9,#documenter .docs-sidebar .docs-logo>img.is-16by9{padding-top:56.25%}.image.is-2by1,#documenter .docs-sidebar .docs-logo>img.is-2by1{padding-top:50%}.image.is-3by1,#documenter .docs-sidebar .docs-logo>img.is-3by1{padding-top:33.3333%}.image.is-4by5,#documenter .docs-sidebar .docs-logo>img.is-4by5{padding-top:125%}.image.is-3by4,#documenter .docs-sidebar .docs-logo>img.is-3by4{padding-top:133.3333%}.image.is-2by3,#documenter .docs-sidebar .docs-logo>img.is-2by3{padding-top:150%}.image.is-3by5,#documenter .docs-sidebar .docs-logo>img.is-3by5{padding-top:166.6666%}.image.is-9by16,#documenter .docs-sidebar .docs-logo>img.is-9by16{padding-top:177.7777%}.image.is-1by2,#documenter .docs-sidebar .docs-logo>img.is-1by2{padding-top:200%}.image.is-1by3,#documenter .docs-sidebar .docs-logo>img.is-1by3{padding-top:300%}.image.is-16x16,#documenter .docs-sidebar .docs-logo>img.is-16x16{height:16px;width:16px}.image.is-24x24,#documenter .docs-sidebar .docs-logo>img.is-24x24{height:24px;width:24px}.image.is-32x32,#documenter .docs-sidebar .docs-logo>img.is-32x32{height:32px;width:32px}.image.is-48x48,#documenter .docs-sidebar .docs-logo>img.is-48x48{height:48px;width:48px}.image.is-64x64,#documenter .docs-sidebar .docs-logo>img.is-64x64{height:64px;width:64px}.image.is-96x96,#documenter .docs-sidebar .docs-logo>img.is-96x96{height:96px;width:96px}.image.is-128x128,#documenter .docs-sidebar .docs-logo>img.is-128x128{height:128px;width:128px}.notification{background-color:#f5f5f5;border-radius:4px;padding:1.25rem 2.5rem 1.25rem 1.5rem;position:relative}.notification a:not(.button):not(.dropdown-item){color:currentColor;text-decoration:underline}.notification strong{color:currentColor}.notification code,.notification pre{background:#fff}.notification pre code{background:transparent}.notification>.delete{position:absolute;right:0.5rem;top:0.5rem}.notification .title,.notification .subtitle,.notification .content{color:currentColor}.notification.is-white{background-color:#fff;color:#0a0a0a}.notification.is-black{background-color:#0a0a0a;color:#fff}.notification.is-light{background-color:#f5f5f5;color:#363636}.notification.is-dark,.content kbd.notification{background-color:#363636;color:#f5f5f5}.notification.is-primary,.docstring>section>a.notification.docs-sourcelink{background-color:#4eb5de;color:#fff}.notification.is-link{background-color:#2e63b8;color:#fff}.notification.is-info{background-color:#209cee;color:#fff}.notification.is-success{background-color:#22c35b;color:#fff}.notification.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.notification.is-danger{background-color:#da0b00;color:#fff}.progress{-moz-appearance:none;-webkit-appearance:none;border:none;border-radius:290486px;display:block;height:1rem;overflow:hidden;padding:0;width:100%}.progress::-webkit-progress-bar{background-color:#dbdbdb}.progress::-webkit-progress-value{background-color:#222}.progress::-moz-progress-bar{background-color:#222}.progress::-ms-fill{background-color:#222;border:none}.progress.is-white::-webkit-progress-value{background-color:#fff}.progress.is-white::-moz-progress-bar{background-color:#fff}.progress.is-white::-ms-fill{background-color:#fff}.progress.is-white:indeterminate{background-image:linear-gradient(to right, #fff 30%, #dbdbdb 30%)}.progress.is-black::-webkit-progress-value{background-color:#0a0a0a}.progress.is-black::-moz-progress-bar{background-color:#0a0a0a}.progress.is-black::-ms-fill{background-color:#0a0a0a}.progress.is-black:indeterminate{background-image:linear-gradient(to right, #0a0a0a 30%, #dbdbdb 30%)}.progress.is-light::-webkit-progress-value{background-color:#f5f5f5}.progress.is-light::-moz-progress-bar{background-color:#f5f5f5}.progress.is-light::-ms-fill{background-color:#f5f5f5}.progress.is-light:indeterminate{background-image:linear-gradient(to right, #f5f5f5 30%, #dbdbdb 30%)}.progress.is-dark::-webkit-progress-value,.content kbd.progress::-webkit-progress-value{background-color:#363636}.progress.is-dark::-moz-progress-bar,.content kbd.progress::-moz-progress-bar{background-color:#363636}.progress.is-dark::-ms-fill,.content kbd.progress::-ms-fill{background-color:#363636}.progress.is-dark:indeterminate,.content kbd.progress:indeterminate{background-image:linear-gradient(to right, #363636 30%, #dbdbdb 30%)}.progress.is-primary::-webkit-progress-value,.docstring>section>a.progress.docs-sourcelink::-webkit-progress-value{background-color:#4eb5de}.progress.is-primary::-moz-progress-bar,.docstring>section>a.progress.docs-sourcelink::-moz-progress-bar{background-color:#4eb5de}.progress.is-primary::-ms-fill,.docstring>section>a.progress.docs-sourcelink::-ms-fill{background-color:#4eb5de}.progress.is-primary:indeterminate,.docstring>section>a.progress.docs-sourcelink:indeterminate{background-image:linear-gradient(to right, #4eb5de 30%, #dbdbdb 30%)}.progress.is-link::-webkit-progress-value{background-color:#2e63b8}.progress.is-link::-moz-progress-bar{background-color:#2e63b8}.progress.is-link::-ms-fill{background-color:#2e63b8}.progress.is-link:indeterminate{background-image:linear-gradient(to right, #2e63b8 30%, #dbdbdb 30%)}.progress.is-info::-webkit-progress-value{background-color:#209cee}.progress.is-info::-moz-progress-bar{background-color:#209cee}.progress.is-info::-ms-fill{background-color:#209cee}.progress.is-info:indeterminate{background-image:linear-gradient(to right, #209cee 30%, #dbdbdb 30%)}.progress.is-success::-webkit-progress-value{background-color:#22c35b}.progress.is-success::-moz-progress-bar{background-color:#22c35b}.progress.is-success::-ms-fill{background-color:#22c35b}.progress.is-success:indeterminate{background-image:linear-gradient(to right, #22c35b 30%, #dbdbdb 30%)}.progress.is-warning::-webkit-progress-value{background-color:#ffdd57}.progress.is-warning::-moz-progress-bar{background-color:#ffdd57}.progress.is-warning::-ms-fill{background-color:#ffdd57}.progress.is-warning:indeterminate{background-image:linear-gradient(to right, #ffdd57 30%, #dbdbdb 30%)}.progress.is-danger::-webkit-progress-value{background-color:#da0b00}.progress.is-danger::-moz-progress-bar{background-color:#da0b00}.progress.is-danger::-ms-fill{background-color:#da0b00}.progress.is-danger:indeterminate{background-image:linear-gradient(to right, #da0b00 30%, #dbdbdb 30%)}.progress:indeterminate{animation-duration:1.5s;animation-iteration-count:infinite;animation-name:moveIndeterminate;animation-timing-function:linear;background-color:#dbdbdb;background-image:linear-gradient(to right, #222 30%, #dbdbdb 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%}.progress:indeterminate::-webkit-progress-bar{background-color:transparent}.progress:indeterminate::-moz-progress-bar{background-color:transparent}.progress.is-small,#documenter .docs-sidebar form.docs-search>input.progress{height:.75rem}.progress.is-medium{height:1.25rem}.progress.is-large{height:1.5rem}@keyframes moveIndeterminate{from{background-position:200% 0}to{background-position:-200% 0}}.table{background-color:#fff;color:#363636}.table td,.table th{border:1px solid #dbdbdb;border-width:0 0 1px;padding:0.5em 0.75em;vertical-align:top}.table td.is-white,.table th.is-white{background-color:#fff;border-color:#fff;color:#0a0a0a}.table td.is-black,.table th.is-black{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.table td.is-light,.table th.is-light{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.table td.is-dark,.table th.is-dark{background-color:#363636;border-color:#363636;color:#f5f5f5}.table td.is-primary,.table th.is-primary{background-color:#4eb5de;border-color:#4eb5de;color:#fff}.table td.is-link,.table th.is-link{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.table td.is-info,.table th.is-info{background-color:#209cee;border-color:#209cee;color:#fff}.table td.is-success,.table th.is-success{background-color:#22c35b;border-color:#22c35b;color:#fff}.table td.is-warning,.table th.is-warning{background-color:#ffdd57;border-color:#ffdd57;color:rgba(0,0,0,0.7)}.table td.is-danger,.table th.is-danger{background-color:#da0b00;border-color:#da0b00;color:#fff}.table td.is-narrow,.table th.is-narrow{white-space:nowrap;width:1%}.table td.is-selected,.table th.is-selected{background-color:#4eb5de;color:#fff}.table td.is-selected a,.table td.is-selected strong,.table th.is-selected a,.table th.is-selected strong{color:currentColor}.table th{color:#222}.table th:not([align]){text-align:left}.table tr.is-selected{background-color:#4eb5de;color:#fff}.table tr.is-selected a,.table tr.is-selected strong{color:currentColor}.table tr.is-selected td,.table tr.is-selected th{border-color:#fff;color:currentColor}.table thead{background-color:rgba(0,0,0,0)}.table thead td,.table thead th{border-width:0 0 2px;color:#222}.table tfoot{background-color:rgba(0,0,0,0)}.table tfoot td,.table tfoot th{border-width:2px 0 0;color:#222}.table tbody{background-color:rgba(0,0,0,0)}.table tbody tr:last-child td,.table tbody tr:last-child th{border-bottom-width:0}.table.is-bordered td,.table.is-bordered th{border-width:1px}.table.is-bordered tr:last-child td,.table.is-bordered tr:last-child th{border-bottom-width:1px}.table.is-fullwidth{width:100%}.table.is-hoverable tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover{background-color:#fafafa}.table.is-hoverable.is-striped tbody tr:not(.is-selected):hover:nth-child(even){background-color:#f5f5f5}.table.is-narrow td,.table.is-narrow th{padding:0.25em 0.5em}.table.is-striped tbody tr:not(.is-selected):nth-child(even){background-color:#fafafa}.table-container{-webkit-overflow-scrolling:touch;overflow:auto;overflow-y:hidden;max-width:100%}.tags{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-start}.tags .tag,.tags .content kbd,.content .tags kbd,.tags .docstring>section>a.docs-sourcelink{margin-bottom:0.5rem}.tags .tag:not(:last-child),.tags .content kbd:not(:last-child),.content .tags kbd:not(:last-child),.tags .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0.5rem}.tags:last-child{margin-bottom:-0.5rem}.tags:not(:last-child){margin-bottom:1rem}.tags.are-medium .tag:not(.is-normal):not(.is-large),.tags.are-medium .content kbd:not(.is-normal):not(.is-large),.content .tags.are-medium kbd:not(.is-normal):not(.is-large),.tags.are-medium .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-large){font-size:1rem}.tags.are-large .tag:not(.is-normal):not(.is-medium),.tags.are-large .content kbd:not(.is-normal):not(.is-medium),.content .tags.are-large kbd:not(.is-normal):not(.is-medium),.tags.are-large .docstring>section>a.docs-sourcelink:not(.is-normal):not(.is-medium){font-size:1.25rem}.tags.is-centered{justify-content:center}.tags.is-centered .tag,.tags.is-centered .content kbd,.content .tags.is-centered kbd,.tags.is-centered .docstring>section>a.docs-sourcelink{margin-right:0.25rem;margin-left:0.25rem}.tags.is-right{justify-content:flex-end}.tags.is-right .tag:not(:first-child),.tags.is-right .content kbd:not(:first-child),.content .tags.is-right kbd:not(:first-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0.5rem}.tags.is-right .tag:not(:last-child),.tags.is-right .content kbd:not(:last-child),.content .tags.is-right kbd:not(:last-child),.tags.is-right .docstring>section>a.docs-sourcelink:not(:last-child){margin-right:0}.tags.has-addons .tag,.tags.has-addons .content kbd,.content .tags.has-addons kbd,.tags.has-addons .docstring>section>a.docs-sourcelink{margin-right:0}.tags.has-addons .tag:not(:first-child),.tags.has-addons .content kbd:not(:first-child),.content .tags.has-addons kbd:not(:first-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:first-child){margin-left:0;border-bottom-left-radius:0;border-top-left-radius:0}.tags.has-addons .tag:not(:last-child),.tags.has-addons .content kbd:not(:last-child),.content .tags.has-addons kbd:not(:last-child),.tags.has-addons .docstring>section>a.docs-sourcelink:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.tag:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink:not(body){align-items:center;background-color:#f5f5f5;border-radius:4px;color:#222;display:inline-flex;font-size:.75rem;height:2em;justify-content:center;line-height:1.5;padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.tag:not(body) .delete,.content kbd:not(body) .delete,.docstring>section>a.docs-sourcelink:not(body) .delete{margin-left:0.25rem;margin-right:-0.375rem}.tag.is-white:not(body),.content kbd.is-white:not(body),.docstring>section>a.docs-sourcelink.is-white:not(body){background-color:#fff;color:#0a0a0a}.tag.is-black:not(body),.content kbd.is-black:not(body),.docstring>section>a.docs-sourcelink.is-black:not(body){background-color:#0a0a0a;color:#fff}.tag.is-light:not(body),.content kbd.is-light:not(body),.docstring>section>a.docs-sourcelink.is-light:not(body){background-color:#f5f5f5;color:#363636}.tag.is-dark:not(body),.content kbd:not(body),.docstring>section>a.docs-sourcelink.is-dark:not(body),.content .docstring>section>kbd:not(body){background-color:#363636;color:#f5f5f5}.tag.is-primary:not(body),.content kbd.is-primary:not(body),.docstring>section>a.docs-sourcelink:not(body){background-color:#4eb5de;color:#fff}.tag.is-link:not(body),.content kbd.is-link:not(body),.docstring>section>a.docs-sourcelink.is-link:not(body){background-color:#2e63b8;color:#fff}.tag.is-info:not(body),.content kbd.is-info:not(body),.docstring>section>a.docs-sourcelink.is-info:not(body){background-color:#209cee;color:#fff}.tag.is-success:not(body),.content kbd.is-success:not(body),.docstring>section>a.docs-sourcelink.is-success:not(body){background-color:#22c35b;color:#fff}.tag.is-warning:not(body),.content kbd.is-warning:not(body),.docstring>section>a.docs-sourcelink.is-warning:not(body){background-color:#ffdd57;color:rgba(0,0,0,0.7)}.tag.is-danger:not(body),.content kbd.is-danger:not(body),.docstring>section>a.docs-sourcelink.is-danger:not(body){background-color:#da0b00;color:#fff}.tag.is-normal:not(body),.content kbd.is-normal:not(body),.docstring>section>a.docs-sourcelink.is-normal:not(body){font-size:.75rem}.tag.is-medium:not(body),.content kbd.is-medium:not(body),.docstring>section>a.docs-sourcelink.is-medium:not(body){font-size:1rem}.tag.is-large:not(body),.content kbd.is-large:not(body),.docstring>section>a.docs-sourcelink.is-large:not(body){font-size:1.25rem}.tag:not(body) .icon:first-child:not(:last-child),.content kbd:not(body) .icon:first-child:not(:last-child),.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:not(:last-child){margin-left:-0.375em;margin-right:0.1875em}.tag:not(body) .icon:last-child:not(:first-child),.content kbd:not(body) .icon:last-child:not(:first-child),.docstring>section>a.docs-sourcelink:not(body) .icon:last-child:not(:first-child){margin-left:0.1875em;margin-right:-0.375em}.tag:not(body) .icon:first-child:last-child,.content kbd:not(body) .icon:first-child:last-child,.docstring>section>a.docs-sourcelink:not(body) .icon:first-child:last-child{margin-left:-0.375em;margin-right:-0.375em}.tag.is-delete:not(body),.content kbd.is-delete:not(body),.docstring>section>a.docs-sourcelink.is-delete:not(body){margin-left:1px;padding:0;position:relative;width:2em}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before,.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{background-color:currentColor;content:"";display:block;left:50%;position:absolute;top:50%;transform:translateX(-50%) translateY(-50%) rotate(45deg);transform-origin:center center}.tag.is-delete:not(body)::before,.content kbd.is-delete:not(body)::before,.docstring>section>a.docs-sourcelink.is-delete:not(body)::before{height:1px;width:50%}.tag.is-delete:not(body)::after,.content kbd.is-delete:not(body)::after,.docstring>section>a.docs-sourcelink.is-delete:not(body)::after{height:50%;width:1px}.tag.is-delete:not(body):hover,.content kbd.is-delete:not(body):hover,.docstring>section>a.docs-sourcelink.is-delete:not(body):hover,.tag.is-delete:not(body):focus,.content kbd.is-delete:not(body):focus,.docstring>section>a.docs-sourcelink.is-delete:not(body):focus{background-color:#e8e8e8}.tag.is-delete:not(body):active,.content kbd.is-delete:not(body):active,.docstring>section>a.docs-sourcelink.is-delete:not(body):active{background-color:#dbdbdb}.tag.is-rounded:not(body),#documenter .docs-sidebar form.docs-search>input:not(body),.content kbd.is-rounded:not(body),#documenter .docs-sidebar .content form.docs-search>input:not(body),.docstring>section>a.docs-sourcelink.is-rounded:not(body){border-radius:290486px}a.tag:hover,.docstring>section>a.docs-sourcelink:hover{text-decoration:underline}.title,.subtitle{word-break:break-word}.title em,.title span,.subtitle em,.subtitle span{font-weight:inherit}.title sub,.subtitle sub{font-size:.75em}.title sup,.subtitle sup{font-size:.75em}.title .tag,.title .content kbd,.content .title kbd,.title .docstring>section>a.docs-sourcelink,.subtitle .tag,.subtitle .content kbd,.content .subtitle kbd,.subtitle .docstring>section>a.docs-sourcelink{vertical-align:middle}.title{color:#363636;font-size:2rem;font-weight:600;line-height:1.125}.title strong{color:inherit;font-weight:inherit}.title+.highlight{margin-top:-0.75rem}.title:not(.is-spaced)+.subtitle{margin-top:-1.25rem}.title.is-1{font-size:3rem}.title.is-2{font-size:2.5rem}.title.is-3{font-size:2rem}.title.is-4{font-size:1.5rem}.title.is-5{font-size:1.25rem}.title.is-6{font-size:1rem}.title.is-7{font-size:.75rem}.subtitle{color:#4a4a4a;font-size:1.25rem;font-weight:400;line-height:1.25}.subtitle strong{color:#363636;font-weight:600}.subtitle:not(.is-spaced)+.title{margin-top:-1.25rem}.subtitle.is-1{font-size:3rem}.subtitle.is-2{font-size:2.5rem}.subtitle.is-3{font-size:2rem}.subtitle.is-4{font-size:1.5rem}.subtitle.is-5{font-size:1.25rem}.subtitle.is-6{font-size:1rem}.subtitle.is-7{font-size:.75rem}.heading{display:block;font-size:11px;letter-spacing:1px;margin-bottom:5px;text-transform:uppercase}.highlight{font-weight:400;max-width:100%;overflow:hidden;padding:0}.highlight pre{overflow:auto;max-width:100%}.number{align-items:center;background-color:#f5f5f5;border-radius:290486px;display:inline-flex;font-size:1.25rem;height:2em;justify-content:center;margin-right:1.5rem;min-width:2.5em;padding:0.25rem 0.5rem;text-align:center;vertical-align:top}.select select,.textarea,.input,#documenter .docs-sidebar form.docs-search>input{background-color:#fff;border-color:#dbdbdb;border-radius:4px;color:#363636}.select select::-moz-placeholder,.textarea::-moz-placeholder,.input::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input::-moz-placeholder{color:rgba(54,54,54,0.3)}.select select::-webkit-input-placeholder,.textarea::-webkit-input-placeholder,.input::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder{color:rgba(54,54,54,0.3)}.select select:-moz-placeholder,.textarea:-moz-placeholder,.input:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input:-moz-placeholder{color:rgba(54,54,54,0.3)}.select select:-ms-input-placeholder,.textarea:-ms-input-placeholder,.input:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder{color:rgba(54,54,54,0.3)}.select select:hover,.textarea:hover,.input:hover,#documenter .docs-sidebar form.docs-search>input:hover,.select select.is-hovered,.is-hovered.textarea,.is-hovered.input,#documenter .docs-sidebar form.docs-search>input.is-hovered{border-color:#b5b5b5}.select select:focus,.textarea:focus,.input:focus,#documenter .docs-sidebar form.docs-search>input:focus,.select select.is-focused,.is-focused.textarea,.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.select select:active,.textarea:active,.input:active,#documenter .docs-sidebar form.docs-search>input:active,.select select.is-active,.is-active.textarea,.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{border-color:#2e63b8;box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select select[disabled],.textarea[disabled],.input[disabled],#documenter .docs-sidebar form.docs-search>input[disabled],fieldset[disabled] .select select,.select fieldset[disabled] select,fieldset[disabled] .textarea,fieldset[disabled] .input,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input{background-color:#f5f5f5;border-color:#f5f5f5;box-shadow:none;color:#6b6b6b}.select select[disabled]::-moz-placeholder,.textarea[disabled]::-moz-placeholder,.input[disabled]::-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-moz-placeholder,fieldset[disabled] .select select::-moz-placeholder,.select fieldset[disabled] select::-moz-placeholder,fieldset[disabled] .textarea::-moz-placeholder,fieldset[disabled] .input::-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]::-webkit-input-placeholder,.textarea[disabled]::-webkit-input-placeholder,.input[disabled]::-webkit-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]::-webkit-input-placeholder,fieldset[disabled] .select select::-webkit-input-placeholder,.select fieldset[disabled] select::-webkit-input-placeholder,fieldset[disabled] .textarea::-webkit-input-placeholder,fieldset[disabled] .input::-webkit-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input::-webkit-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input::-webkit-input-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-moz-placeholder,.textarea[disabled]:-moz-placeholder,.input[disabled]:-moz-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-moz-placeholder,fieldset[disabled] .select select:-moz-placeholder,.select fieldset[disabled] select:-moz-placeholder,fieldset[disabled] .textarea:-moz-placeholder,fieldset[disabled] .input:-moz-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-moz-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-moz-placeholder{color:rgba(107,107,107,0.3)}.select select[disabled]:-ms-input-placeholder,.textarea[disabled]:-ms-input-placeholder,.input[disabled]:-ms-input-placeholder,#documenter .docs-sidebar form.docs-search>input[disabled]:-ms-input-placeholder,fieldset[disabled] .select select:-ms-input-placeholder,.select fieldset[disabled] select:-ms-input-placeholder,fieldset[disabled] .textarea:-ms-input-placeholder,fieldset[disabled] .input:-ms-input-placeholder,fieldset[disabled] #documenter .docs-sidebar form.docs-search>input:-ms-input-placeholder,#documenter .docs-sidebar fieldset[disabled] form.docs-search>input:-ms-input-placeholder{color:rgba(107,107,107,0.3)}.textarea,.input,#documenter .docs-sidebar form.docs-search>input{box-shadow:inset 0 1px 2px rgba(10,10,10,0.1);max-width:100%;width:100%}.textarea[readonly],.input[readonly],#documenter .docs-sidebar form.docs-search>input[readonly]{box-shadow:none}.is-white.textarea,.is-white.input,#documenter .docs-sidebar form.docs-search>input.is-white{border-color:#fff}.is-white.textarea:focus,.is-white.input:focus,#documenter .docs-sidebar form.docs-search>input.is-white:focus,.is-white.is-focused.textarea,.is-white.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-white.textarea:active,.is-white.input:active,#documenter .docs-sidebar form.docs-search>input.is-white:active,.is-white.is-active.textarea,.is-white.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.is-black.textarea,.is-black.input,#documenter .docs-sidebar form.docs-search>input.is-black{border-color:#0a0a0a}.is-black.textarea:focus,.is-black.input:focus,#documenter .docs-sidebar form.docs-search>input.is-black:focus,.is-black.is-focused.textarea,.is-black.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-black.textarea:active,.is-black.input:active,#documenter .docs-sidebar form.docs-search>input.is-black:active,.is-black.is-active.textarea,.is-black.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.is-light.textarea,.is-light.input,#documenter .docs-sidebar form.docs-search>input.is-light{border-color:#f5f5f5}.is-light.textarea:focus,.is-light.input:focus,#documenter .docs-sidebar form.docs-search>input.is-light:focus,.is-light.is-focused.textarea,.is-light.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-light.textarea:active,.is-light.input:active,#documenter .docs-sidebar form.docs-search>input.is-light:active,.is-light.is-active.textarea,.is-light.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.is-dark.textarea,.content kbd.textarea,.is-dark.input,#documenter .docs-sidebar form.docs-search>input.is-dark,.content kbd.input{border-color:#363636}.is-dark.textarea:focus,.content kbd.textarea:focus,.is-dark.input:focus,#documenter .docs-sidebar form.docs-search>input.is-dark:focus,.content kbd.input:focus,.is-dark.is-focused.textarea,.content kbd.is-focused.textarea,.is-dark.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.content kbd.is-focused.input,#documenter .docs-sidebar .content form.docs-search>input.is-focused,.is-dark.textarea:active,.content kbd.textarea:active,.is-dark.input:active,#documenter .docs-sidebar form.docs-search>input.is-dark:active,.content kbd.input:active,.is-dark.is-active.textarea,.content kbd.is-active.textarea,.is-dark.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.content kbd.is-active.input,#documenter .docs-sidebar .content form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.is-primary.textarea,.docstring>section>a.textarea.docs-sourcelink,.is-primary.input,#documenter .docs-sidebar form.docs-search>input.is-primary,.docstring>section>a.input.docs-sourcelink{border-color:#4eb5de}.is-primary.textarea:focus,.docstring>section>a.textarea.docs-sourcelink:focus,.is-primary.input:focus,#documenter .docs-sidebar form.docs-search>input.is-primary:focus,.docstring>section>a.input.docs-sourcelink:focus,.is-primary.is-focused.textarea,.docstring>section>a.is-focused.textarea.docs-sourcelink,.is-primary.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.docstring>section>a.is-focused.input.docs-sourcelink,.is-primary.textarea:active,.docstring>section>a.textarea.docs-sourcelink:active,.is-primary.input:active,#documenter .docs-sidebar form.docs-search>input.is-primary:active,.docstring>section>a.input.docs-sourcelink:active,.is-primary.is-active.textarea,.docstring>section>a.is-active.textarea.docs-sourcelink,.is-primary.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active,.docstring>section>a.is-active.input.docs-sourcelink{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.is-link.textarea,.is-link.input,#documenter .docs-sidebar form.docs-search>input.is-link{border-color:#2e63b8}.is-link.textarea:focus,.is-link.input:focus,#documenter .docs-sidebar form.docs-search>input.is-link:focus,.is-link.is-focused.textarea,.is-link.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-link.textarea:active,.is-link.input:active,#documenter .docs-sidebar form.docs-search>input.is-link:active,.is-link.is-active.textarea,.is-link.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.is-info.textarea,.is-info.input,#documenter .docs-sidebar form.docs-search>input.is-info{border-color:#209cee}.is-info.textarea:focus,.is-info.input:focus,#documenter .docs-sidebar form.docs-search>input.is-info:focus,.is-info.is-focused.textarea,.is-info.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-info.textarea:active,.is-info.input:active,#documenter .docs-sidebar form.docs-search>input.is-info:active,.is-info.is-active.textarea,.is-info.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.is-success.textarea,.is-success.input,#documenter .docs-sidebar form.docs-search>input.is-success{border-color:#22c35b}.is-success.textarea:focus,.is-success.input:focus,#documenter .docs-sidebar form.docs-search>input.is-success:focus,.is-success.is-focused.textarea,.is-success.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-success.textarea:active,.is-success.input:active,#documenter .docs-sidebar form.docs-search>input.is-success:active,.is-success.is-active.textarea,.is-success.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.is-warning.textarea,.is-warning.input,#documenter .docs-sidebar form.docs-search>input.is-warning{border-color:#ffdd57}.is-warning.textarea:focus,.is-warning.input:focus,#documenter .docs-sidebar form.docs-search>input.is-warning:focus,.is-warning.is-focused.textarea,.is-warning.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-warning.textarea:active,.is-warning.input:active,#documenter .docs-sidebar form.docs-search>input.is-warning:active,.is-warning.is-active.textarea,.is-warning.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.is-danger.textarea,.is-danger.input,#documenter .docs-sidebar form.docs-search>input.is-danger{border-color:#da0b00}.is-danger.textarea:focus,.is-danger.input:focus,#documenter .docs-sidebar form.docs-search>input.is-danger:focus,.is-danger.is-focused.textarea,.is-danger.is-focused.input,#documenter .docs-sidebar form.docs-search>input.is-focused,.is-danger.textarea:active,.is-danger.input:active,#documenter .docs-sidebar form.docs-search>input.is-danger:active,.is-danger.is-active.textarea,.is-danger.is-active.input,#documenter .docs-sidebar form.docs-search>input.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.is-small.textarea,.is-small.input,#documenter .docs-sidebar form.docs-search>input{border-radius:2px;font-size:.75rem}.is-medium.textarea,.is-medium.input,#documenter .docs-sidebar form.docs-search>input.is-medium{font-size:1.25rem}.is-large.textarea,.is-large.input,#documenter .docs-sidebar form.docs-search>input.is-large{font-size:1.5rem}.is-fullwidth.textarea,.is-fullwidth.input,#documenter .docs-sidebar form.docs-search>input.is-fullwidth{display:block;width:100%}.is-inline.textarea,.is-inline.input,#documenter .docs-sidebar form.docs-search>input.is-inline{display:inline;width:auto}.input.is-rounded,#documenter .docs-sidebar form.docs-search>input{border-radius:290486px;padding-left:1em;padding-right:1em}.input.is-static,#documenter .docs-sidebar form.docs-search>input.is-static{background-color:transparent;border-color:transparent;box-shadow:none;padding-left:0;padding-right:0}.textarea{display:block;max-width:100%;min-width:100%;padding:0.625em;resize:vertical}.textarea:not([rows]){max-height:600px;min-height:120px}.textarea[rows]{height:initial}.textarea.has-fixed-size{resize:none}.radio,.checkbox{cursor:pointer;display:inline-block;line-height:1.25;position:relative}.radio input,.checkbox input{cursor:pointer}.radio:hover,.checkbox:hover{color:#363636}.radio[disabled],.checkbox[disabled],fieldset[disabled] .radio,fieldset[disabled] .checkbox{color:#6b6b6b;cursor:not-allowed}.radio+.radio{margin-left:0.5em}.select{display:inline-block;max-width:100%;position:relative;vertical-align:top}.select:not(.is-multiple){height:2.25em}.select:not(.is-multiple):not(.is-loading)::after{border-color:#2e63b8;right:1.125em;z-index:4}.select.is-rounded select,#documenter .docs-sidebar form.docs-search>input.select select{border-radius:290486px;padding-left:1em}.select select{cursor:pointer;display:block;font-size:1em;max-width:100%;outline:none}.select select::-ms-expand{display:none}.select select[disabled]:hover,fieldset[disabled] .select select:hover{border-color:#f5f5f5}.select select:not([multiple]){padding-right:2.5em}.select select[multiple]{height:auto;padding:0}.select select[multiple] option{padding:0.5em 1em}.select:not(.is-multiple):not(.is-loading):hover::after{border-color:#363636}.select.is-white:not(:hover)::after{border-color:#fff}.select.is-white select{border-color:#fff}.select.is-white select:hover,.select.is-white select.is-hovered{border-color:#f2f2f2}.select.is-white select:focus,.select.is-white select.is-focused,.select.is-white select:active,.select.is-white select.is-active{box-shadow:0 0 0 0.125em rgba(255,255,255,0.25)}.select.is-black:not(:hover)::after{border-color:#0a0a0a}.select.is-black select{border-color:#0a0a0a}.select.is-black select:hover,.select.is-black select.is-hovered{border-color:#000}.select.is-black select:focus,.select.is-black select.is-focused,.select.is-black select:active,.select.is-black select.is-active{box-shadow:0 0 0 0.125em rgba(10,10,10,0.25)}.select.is-light:not(:hover)::after{border-color:#f5f5f5}.select.is-light select{border-color:#f5f5f5}.select.is-light select:hover,.select.is-light select.is-hovered{border-color:#e8e8e8}.select.is-light select:focus,.select.is-light select.is-focused,.select.is-light select:active,.select.is-light select.is-active{box-shadow:0 0 0 0.125em rgba(245,245,245,0.25)}.select.is-dark:not(:hover)::after,.content kbd.select:not(:hover)::after{border-color:#363636}.select.is-dark select,.content kbd.select select{border-color:#363636}.select.is-dark select:hover,.content kbd.select select:hover,.select.is-dark select.is-hovered,.content kbd.select select.is-hovered{border-color:#292929}.select.is-dark select:focus,.content kbd.select select:focus,.select.is-dark select.is-focused,.content kbd.select select.is-focused,.select.is-dark select:active,.content kbd.select select:active,.select.is-dark select.is-active,.content kbd.select select.is-active{box-shadow:0 0 0 0.125em rgba(54,54,54,0.25)}.select.is-primary:not(:hover)::after,.docstring>section>a.select.docs-sourcelink:not(:hover)::after{border-color:#4eb5de}.select.is-primary select,.docstring>section>a.select.docs-sourcelink select{border-color:#4eb5de}.select.is-primary select:hover,.docstring>section>a.select.docs-sourcelink select:hover,.select.is-primary select.is-hovered,.docstring>section>a.select.docs-sourcelink select.is-hovered{border-color:#39acda}.select.is-primary select:focus,.docstring>section>a.select.docs-sourcelink select:focus,.select.is-primary select.is-focused,.docstring>section>a.select.docs-sourcelink select.is-focused,.select.is-primary select:active,.docstring>section>a.select.docs-sourcelink select:active,.select.is-primary select.is-active,.docstring>section>a.select.docs-sourcelink select.is-active{box-shadow:0 0 0 0.125em rgba(78,181,222,0.25)}.select.is-link:not(:hover)::after{border-color:#2e63b8}.select.is-link select{border-color:#2e63b8}.select.is-link select:hover,.select.is-link select.is-hovered{border-color:#2958a4}.select.is-link select:focus,.select.is-link select.is-focused,.select.is-link select:active,.select.is-link select.is-active{box-shadow:0 0 0 0.125em rgba(46,99,184,0.25)}.select.is-info:not(:hover)::after{border-color:#209cee}.select.is-info select{border-color:#209cee}.select.is-info select:hover,.select.is-info select.is-hovered{border-color:#1190e3}.select.is-info select:focus,.select.is-info select.is-focused,.select.is-info select:active,.select.is-info select.is-active{box-shadow:0 0 0 0.125em rgba(32,156,238,0.25)}.select.is-success:not(:hover)::after{border-color:#22c35b}.select.is-success select{border-color:#22c35b}.select.is-success select:hover,.select.is-success select.is-hovered{border-color:#1ead51}.select.is-success select:focus,.select.is-success select.is-focused,.select.is-success select:active,.select.is-success select.is-active{box-shadow:0 0 0 0.125em rgba(34,195,91,0.25)}.select.is-warning:not(:hover)::after{border-color:#ffdd57}.select.is-warning select{border-color:#ffdd57}.select.is-warning select:hover,.select.is-warning select.is-hovered{border-color:#ffd83e}.select.is-warning select:focus,.select.is-warning select.is-focused,.select.is-warning select:active,.select.is-warning select.is-active{box-shadow:0 0 0 0.125em rgba(255,221,87,0.25)}.select.is-danger:not(:hover)::after{border-color:#da0b00}.select.is-danger select{border-color:#da0b00}.select.is-danger select:hover,.select.is-danger select.is-hovered{border-color:#c10a00}.select.is-danger select:focus,.select.is-danger select.is-focused,.select.is-danger select:active,.select.is-danger select.is-active{box-shadow:0 0 0 0.125em rgba(218,11,0,0.25)}.select.is-small,#documenter .docs-sidebar form.docs-search>input.select{border-radius:2px;font-size:.75rem}.select.is-medium{font-size:1.25rem}.select.is-large{font-size:1.5rem}.select.is-disabled::after{border-color:#6b6b6b}.select.is-fullwidth{width:100%}.select.is-fullwidth select{width:100%}.select.is-loading::after{margin-top:0;position:absolute;right:0.625em;top:0.625em;transform:none}.select.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.select.is-loading.is-medium:after{font-size:1.25rem}.select.is-loading.is-large:after{font-size:1.5rem}.file{align-items:stretch;display:flex;justify-content:flex-start;position:relative}.file.is-white .file-cta{background-color:#fff;border-color:transparent;color:#0a0a0a}.file.is-white:hover .file-cta,.file.is-white.is-hovered .file-cta{background-color:#f9f9f9;border-color:transparent;color:#0a0a0a}.file.is-white:focus .file-cta,.file.is-white.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,255,255,0.25);color:#0a0a0a}.file.is-white:active .file-cta,.file.is-white.is-active .file-cta{background-color:#f2f2f2;border-color:transparent;color:#0a0a0a}.file.is-black .file-cta{background-color:#0a0a0a;border-color:transparent;color:#fff}.file.is-black:hover .file-cta,.file.is-black.is-hovered .file-cta{background-color:#040404;border-color:transparent;color:#fff}.file.is-black:focus .file-cta,.file.is-black.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(10,10,10,0.25);color:#fff}.file.is-black:active .file-cta,.file.is-black.is-active .file-cta{background-color:#000;border-color:transparent;color:#fff}.file.is-light .file-cta{background-color:#f5f5f5;border-color:transparent;color:#363636}.file.is-light:hover .file-cta,.file.is-light.is-hovered .file-cta{background-color:#eee;border-color:transparent;color:#363636}.file.is-light:focus .file-cta,.file.is-light.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(245,245,245,0.25);color:#363636}.file.is-light:active .file-cta,.file.is-light.is-active .file-cta{background-color:#e8e8e8;border-color:transparent;color:#363636}.file.is-dark .file-cta,.content kbd.file .file-cta{background-color:#363636;border-color:transparent;color:#f5f5f5}.file.is-dark:hover .file-cta,.content kbd.file:hover .file-cta,.file.is-dark.is-hovered .file-cta,.content kbd.file.is-hovered .file-cta{background-color:#2f2f2f;border-color:transparent;color:#f5f5f5}.file.is-dark:focus .file-cta,.content kbd.file:focus .file-cta,.file.is-dark.is-focused .file-cta,.content kbd.file.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(54,54,54,0.25);color:#f5f5f5}.file.is-dark:active .file-cta,.content kbd.file:active .file-cta,.file.is-dark.is-active .file-cta,.content kbd.file.is-active .file-cta{background-color:#292929;border-color:transparent;color:#f5f5f5}.file.is-primary .file-cta,.docstring>section>a.file.docs-sourcelink .file-cta{background-color:#4eb5de;border-color:transparent;color:#fff}.file.is-primary:hover .file-cta,.docstring>section>a.file.docs-sourcelink:hover .file-cta,.file.is-primary.is-hovered .file-cta,.docstring>section>a.file.is-hovered.docs-sourcelink .file-cta{background-color:#43b1dc;border-color:transparent;color:#fff}.file.is-primary:focus .file-cta,.docstring>section>a.file.docs-sourcelink:focus .file-cta,.file.is-primary.is-focused .file-cta,.docstring>section>a.file.is-focused.docs-sourcelink .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(78,181,222,0.25);color:#fff}.file.is-primary:active .file-cta,.docstring>section>a.file.docs-sourcelink:active .file-cta,.file.is-primary.is-active .file-cta,.docstring>section>a.file.is-active.docs-sourcelink .file-cta{background-color:#39acda;border-color:transparent;color:#fff}.file.is-link .file-cta{background-color:#2e63b8;border-color:transparent;color:#fff}.file.is-link:hover .file-cta,.file.is-link.is-hovered .file-cta{background-color:#2b5eae;border-color:transparent;color:#fff}.file.is-link:focus .file-cta,.file.is-link.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(46,99,184,0.25);color:#fff}.file.is-link:active .file-cta,.file.is-link.is-active .file-cta{background-color:#2958a4;border-color:transparent;color:#fff}.file.is-info .file-cta{background-color:#209cee;border-color:transparent;color:#fff}.file.is-info:hover .file-cta,.file.is-info.is-hovered .file-cta{background-color:#1497ed;border-color:transparent;color:#fff}.file.is-info:focus .file-cta,.file.is-info.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(32,156,238,0.25);color:#fff}.file.is-info:active .file-cta,.file.is-info.is-active .file-cta{background-color:#1190e3;border-color:transparent;color:#fff}.file.is-success .file-cta{background-color:#22c35b;border-color:transparent;color:#fff}.file.is-success:hover .file-cta,.file.is-success.is-hovered .file-cta{background-color:#20b856;border-color:transparent;color:#fff}.file.is-success:focus .file-cta,.file.is-success.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(34,195,91,0.25);color:#fff}.file.is-success:active .file-cta,.file.is-success.is-active .file-cta{background-color:#1ead51;border-color:transparent;color:#fff}.file.is-warning .file-cta{background-color:#ffdd57;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:hover .file-cta,.file.is-warning.is-hovered .file-cta{background-color:#ffda4a;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-warning:focus .file-cta,.file.is-warning.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(255,221,87,0.25);color:rgba(0,0,0,0.7)}.file.is-warning:active .file-cta,.file.is-warning.is-active .file-cta{background-color:#ffd83e;border-color:transparent;color:rgba(0,0,0,0.7)}.file.is-danger .file-cta{background-color:#da0b00;border-color:transparent;color:#fff}.file.is-danger:hover .file-cta,.file.is-danger.is-hovered .file-cta{background-color:#cd0a00;border-color:transparent;color:#fff}.file.is-danger:focus .file-cta,.file.is-danger.is-focused .file-cta{border-color:transparent;box-shadow:0 0 0.5em rgba(218,11,0,0.25);color:#fff}.file.is-danger:active .file-cta,.file.is-danger.is-active .file-cta{background-color:#c10a00;border-color:transparent;color:#fff}.file.is-small,#documenter .docs-sidebar form.docs-search>input.file{font-size:.75rem}.file.is-medium{font-size:1.25rem}.file.is-medium .file-icon .fa{font-size:21px}.file.is-large{font-size:1.5rem}.file.is-large .file-icon .fa{font-size:28px}.file.has-name .file-cta{border-bottom-right-radius:0;border-top-right-radius:0}.file.has-name .file-name{border-bottom-left-radius:0;border-top-left-radius:0}.file.has-name.is-empty .file-cta{border-radius:4px}.file.has-name.is-empty .file-name{display:none}.file.is-boxed .file-label{flex-direction:column}.file.is-boxed .file-cta{flex-direction:column;height:auto;padding:1em 3em}.file.is-boxed .file-name{border-width:0 1px 1px}.file.is-boxed .file-icon{height:1.5em;width:1.5em}.file.is-boxed .file-icon .fa{font-size:21px}.file.is-boxed.is-small .file-icon .fa,#documenter .docs-sidebar form.docs-search>input.is-boxed .file-icon .fa{font-size:14px}.file.is-boxed.is-medium .file-icon .fa{font-size:28px}.file.is-boxed.is-large .file-icon .fa{font-size:35px}.file.is-boxed.has-name .file-cta{border-radius:4px 4px 0 0}.file.is-boxed.has-name .file-name{border-radius:0 0 4px 4px;border-width:0 1px 1px}.file.is-centered{justify-content:center}.file.is-fullwidth .file-label{width:100%}.file.is-fullwidth .file-name{flex-grow:1;max-width:none}.file.is-right{justify-content:flex-end}.file.is-right .file-cta{border-radius:0 4px 4px 0}.file.is-right .file-name{border-radius:4px 0 0 4px;border-width:1px 0 1px 1px;order:-1}.file-label{align-items:stretch;display:flex;cursor:pointer;justify-content:flex-start;overflow:hidden;position:relative}.file-label:hover .file-cta{background-color:#eee;color:#363636}.file-label:hover .file-name{border-color:#d5d5d5}.file-label:active .file-cta{background-color:#e8e8e8;color:#363636}.file-label:active .file-name{border-color:#cfcfcf}.file-input{height:100%;left:0;opacity:0;outline:none;position:absolute;top:0;width:100%}.file-cta,.file-name{border-color:#dbdbdb;border-radius:4px;font-size:1em;padding-left:1em;padding-right:1em;white-space:nowrap}.file-cta{background-color:#f5f5f5;color:#4a4a4a}.file-name{border-color:#dbdbdb;border-style:solid;border-width:1px 1px 1px 0;display:block;max-width:16em;overflow:hidden;text-align:left;text-overflow:ellipsis}.file-icon{align-items:center;display:flex;height:1em;justify-content:center;margin-right:0.5em;width:1em}.file-icon .fa{font-size:14px}.label{color:#363636;display:block;font-size:1rem;font-weight:700}.label:not(:last-child){margin-bottom:0.5em}.label.is-small,#documenter .docs-sidebar form.docs-search>input.label{font-size:.75rem}.label.is-medium{font-size:1.25rem}.label.is-large{font-size:1.5rem}.help{display:block;font-size:.75rem;margin-top:0.25rem}.help.is-white{color:#fff}.help.is-black{color:#0a0a0a}.help.is-light{color:#f5f5f5}.help.is-dark,.content kbd.help{color:#363636}.help.is-primary,.docstring>section>a.help.docs-sourcelink{color:#4eb5de}.help.is-link{color:#2e63b8}.help.is-info{color:#209cee}.help.is-success{color:#22c35b}.help.is-warning{color:#ffdd57}.help.is-danger{color:#da0b00}.field:not(:last-child){margin-bottom:0.75rem}.field.has-addons{display:flex;justify-content:flex-start}.field.has-addons .control:not(:last-child){margin-right:-1px}.field.has-addons .control:not(:first-child):not(:last-child) .button,.field.has-addons .control:not(:first-child):not(:last-child) .input,.field.has-addons .control:not(:first-child):not(:last-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:not(:first-child):not(:last-child) form.docs-search>input,.field.has-addons .control:not(:first-child):not(:last-child) .select select{border-radius:0}.field.has-addons .control:first-child:not(:only-child) .button,.field.has-addons .control:first-child:not(:only-child) .input,.field.has-addons .control:first-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:first-child:not(:only-child) form.docs-search>input,.field.has-addons .control:first-child:not(:only-child) .select select{border-bottom-right-radius:0;border-top-right-radius:0}.field.has-addons .control:last-child:not(:only-child) .button,.field.has-addons .control:last-child:not(:only-child) .input,.field.has-addons .control:last-child:not(:only-child) #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .field.has-addons .control:last-child:not(:only-child) form.docs-search>input,.field.has-addons .control:last-child:not(:only-child) .select select{border-bottom-left-radius:0;border-top-left-radius:0}.field.has-addons .control .button:not([disabled]):hover,.field.has-addons .control .button.is-hovered:not([disabled]),.field.has-addons .control .input:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):hover,.field.has-addons .control .input.is-hovered:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-hovered:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-hovered:not([disabled]),.field.has-addons .control .select select:not([disabled]):hover,.field.has-addons .control .select select.is-hovered:not([disabled]){z-index:2}.field.has-addons .control .button:not([disabled]):focus,.field.has-addons .control .button.is-focused:not([disabled]),.field.has-addons .control .button:not([disabled]):active,.field.has-addons .control .button.is-active:not([disabled]),.field.has-addons .control .input:not([disabled]):focus,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus,.field.has-addons .control .input.is-focused:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]),.field.has-addons .control .input:not([disabled]):active,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active,.field.has-addons .control .input.is-active:not([disabled]),.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]),#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]),.field.has-addons .control .select select:not([disabled]):focus,.field.has-addons .control .select select.is-focused:not([disabled]),.field.has-addons .control .select select:not([disabled]):active,.field.has-addons .control .select select.is-active:not([disabled]){z-index:3}.field.has-addons .control .button:not([disabled]):focus:hover,.field.has-addons .control .button.is-focused:not([disabled]):hover,.field.has-addons .control .button:not([disabled]):active:hover,.field.has-addons .control .button.is-active:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):focus:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):focus:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):focus:hover,.field.has-addons .control .input.is-focused:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-focused:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-focused:not([disabled]):hover,.field.has-addons .control .input:not([disabled]):active:hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input:not([disabled]):active:hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input:not([disabled]):active:hover,.field.has-addons .control .input.is-active:not([disabled]):hover,.field.has-addons .control #documenter .docs-sidebar form.docs-search>input.is-active:not([disabled]):hover,#documenter .docs-sidebar .field.has-addons .control form.docs-search>input.is-active:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):focus:hover,.field.has-addons .control .select select.is-focused:not([disabled]):hover,.field.has-addons .control .select select:not([disabled]):active:hover,.field.has-addons .control .select select.is-active:not([disabled]):hover{z-index:4}.field.has-addons .control.is-expanded{flex-grow:1;flex-shrink:1}.field.has-addons.has-addons-centered{justify-content:center}.field.has-addons.has-addons-right{justify-content:flex-end}.field.has-addons.has-addons-fullwidth .control{flex-grow:1;flex-shrink:0}.field.is-grouped{display:flex;justify-content:flex-start}.field.is-grouped>.control{flex-shrink:0}.field.is-grouped>.control:not(:last-child){margin-bottom:0;margin-right:0.75rem}.field.is-grouped>.control.is-expanded{flex-grow:1;flex-shrink:1}.field.is-grouped.is-grouped-centered{justify-content:center}.field.is-grouped.is-grouped-right{justify-content:flex-end}.field.is-grouped.is-grouped-multiline{flex-wrap:wrap}.field.is-grouped.is-grouped-multiline>.control:last-child,.field.is-grouped.is-grouped-multiline>.control:not(:last-child){margin-bottom:0.75rem}.field.is-grouped.is-grouped-multiline:last-child{margin-bottom:-0.75rem}.field.is-grouped.is-grouped-multiline:not(:last-child){margin-bottom:0}@media screen and (min-width: 769px),print{.field.is-horizontal{display:flex}}.field-label .label{font-size:inherit}@media screen and (max-width: 768px){.field-label{margin-bottom:0.5rem}}@media screen and (min-width: 769px),print{.field-label{flex-basis:0;flex-grow:1;flex-shrink:0;margin-right:1.5rem;text-align:right}.field-label.is-small,#documenter .docs-sidebar form.docs-search>input.field-label{font-size:.75rem;padding-top:0.375em}.field-label.is-normal{padding-top:0.375em}.field-label.is-medium{font-size:1.25rem;padding-top:0.375em}.field-label.is-large{font-size:1.5rem;padding-top:0.375em}}.field-body .field .field{margin-bottom:0}@media screen and (min-width: 769px),print{.field-body{display:flex;flex-basis:0;flex-grow:5;flex-shrink:1}.field-body .field{margin-bottom:0}.field-body>.field{flex-shrink:1}.field-body>.field:not(.is-narrow){flex-grow:1}.field-body>.field:not(:last-child){margin-right:0.75rem}}.control{box-sizing:border-box;clear:both;font-size:1rem;position:relative;text-align:left}.control.has-icons-left .input:focus~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input:focus~.icon,.control.has-icons-left .select:focus~.icon,.control.has-icons-right .input:focus~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input:focus~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input:focus~.icon,.control.has-icons-right .select:focus~.icon{color:#6b6b6b}.control.has-icons-left .input.is-small~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input~.icon,.control.has-icons-left .select.is-small~.icon,.control.has-icons-right .input.is-small~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input~.icon,.control.has-icons-right .select.is-small~.icon{font-size:.75rem}.control.has-icons-left .input.is-medium~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-medium~.icon,.control.has-icons-left .select.is-medium~.icon,.control.has-icons-right .input.is-medium~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-medium~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-medium~.icon,.control.has-icons-right .select.is-medium~.icon{font-size:1.25rem}.control.has-icons-left .input.is-large~.icon,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input.is-large~.icon,.control.has-icons-left .select.is-large~.icon,.control.has-icons-right .input.is-large~.icon,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input.is-large~.icon,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input.is-large~.icon,.control.has-icons-right .select.is-large~.icon{font-size:1.5rem}.control.has-icons-left .icon,.control.has-icons-right .icon{color:#dbdbdb;height:2.25em;pointer-events:none;position:absolute;top:0;width:2.25em;z-index:4}.control.has-icons-left .input,.control.has-icons-left #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-left form.docs-search>input,.control.has-icons-left .select select{padding-left:2.25em}.control.has-icons-left .icon.is-left{left:0}.control.has-icons-right .input,.control.has-icons-right #documenter .docs-sidebar form.docs-search>input,#documenter .docs-sidebar .control.has-icons-right form.docs-search>input,.control.has-icons-right .select select{padding-right:2.25em}.control.has-icons-right .icon.is-right{right:0}.control.is-loading::after{position:absolute !important;right:0.625em;top:0.625em;z-index:4}.control.is-loading.is-small:after,#documenter .docs-sidebar form.docs-search>input.is-loading:after{font-size:.75rem}.control.is-loading.is-medium:after{font-size:1.25rem}.control.is-loading.is-large:after{font-size:1.5rem}.breadcrumb{font-size:1rem;white-space:nowrap}.breadcrumb a{align-items:center;color:#2e63b8;display:flex;justify-content:center;padding:0 .75em}.breadcrumb a:hover{color:#363636}.breadcrumb li{align-items:center;display:flex}.breadcrumb li:first-child a{padding-left:0}.breadcrumb li.is-active a{color:#222;cursor:default;pointer-events:none}.breadcrumb li+li::before{color:#b5b5b5;content:"\0002f"}.breadcrumb ul,.breadcrumb ol{align-items:flex-start;display:flex;flex-wrap:wrap;justify-content:flex-start}.breadcrumb .icon:first-child{margin-right:0.5em}.breadcrumb .icon:last-child{margin-left:0.5em}.breadcrumb.is-centered ol,.breadcrumb.is-centered ul{justify-content:center}.breadcrumb.is-right ol,.breadcrumb.is-right ul{justify-content:flex-end}.breadcrumb.is-small,#documenter .docs-sidebar form.docs-search>input.breadcrumb{font-size:.75rem}.breadcrumb.is-medium{font-size:1.25rem}.breadcrumb.is-large{font-size:1.5rem}.breadcrumb.has-arrow-separator li+li::before{content:"\02192"}.breadcrumb.has-bullet-separator li+li::before{content:"\02022"}.breadcrumb.has-dot-separator li+li::before{content:"\000b7"}.breadcrumb.has-succeeds-separator li+li::before{content:"\0227B"}.card{background-color:#fff;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);color:#222;max-width:100%;position:relative}.card-header{background-color:rgba(0,0,0,0);align-items:stretch;box-shadow:0 1px 2px rgba(10,10,10,0.1);display:flex}.card-header-title{align-items:center;color:#222;display:flex;flex-grow:1;font-weight:700;padding:.75rem}.card-header-title.is-centered{justify-content:center}.card-header-icon{align-items:center;cursor:pointer;display:flex;justify-content:center;padding:.75rem}.card-image{display:block;position:relative}.card-content{background-color:rgba(0,0,0,0);padding:1.5rem}.card-footer{background-color:rgba(0,0,0,0);border-top:1px solid #dbdbdb;align-items:stretch;display:flex}.card-footer-item{align-items:center;display:flex;flex-basis:0;flex-grow:1;flex-shrink:0;justify-content:center;padding:.75rem}.card-footer-item:not(:last-child){border-right:1px solid #dbdbdb}.card .media:not(:last-child){margin-bottom:1.5rem}.dropdown{display:inline-flex;position:relative;vertical-align:top}.dropdown.is-active .dropdown-menu,.dropdown.is-hoverable:hover .dropdown-menu{display:block}.dropdown.is-right .dropdown-menu{left:auto;right:0}.dropdown.is-up .dropdown-menu{bottom:100%;padding-bottom:4px;padding-top:initial;top:auto}.dropdown-menu{display:none;left:0;min-width:12rem;padding-top:4px;position:absolute;top:100%;z-index:20}.dropdown-content{background-color:#fff;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1);padding-bottom:.5rem;padding-top:.5rem}.dropdown-item{color:#4a4a4a;display:block;font-size:0.875rem;line-height:1.5;padding:0.375rem 1rem;position:relative}a.dropdown-item,button.dropdown-item{padding-right:3rem;text-align:left;white-space:nowrap;width:100%}a.dropdown-item:hover,button.dropdown-item:hover{background-color:#f5f5f5;color:#0a0a0a}a.dropdown-item.is-active,button.dropdown-item.is-active{background-color:#2e63b8;color:#fff}.dropdown-divider{background-color:#dbdbdb;border:none;display:block;height:1px;margin:0.5rem 0}.level{align-items:center;justify-content:space-between}.level code{border-radius:4px}.level img{display:inline-block;vertical-align:top}.level.is-mobile{display:flex}.level.is-mobile .level-left,.level.is-mobile .level-right{display:flex}.level.is-mobile .level-left+.level-right{margin-top:0}.level.is-mobile .level-item:not(:last-child){margin-bottom:0;margin-right:.75rem}.level.is-mobile .level-item:not(.is-narrow){flex-grow:1}@media screen and (min-width: 769px),print{.level{display:flex}.level>.level-item:not(.is-narrow){flex-grow:1}}.level-item{align-items:center;display:flex;flex-basis:auto;flex-grow:0;flex-shrink:0;justify-content:center}.level-item .title,.level-item .subtitle{margin-bottom:0}@media screen and (max-width: 768px){.level-item:not(:last-child){margin-bottom:.75rem}}.level-left,.level-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.level-left .level-item.is-flexible,.level-right .level-item.is-flexible{flex-grow:1}@media screen and (min-width: 769px),print{.level-left .level-item:not(:last-child),.level-right .level-item:not(:last-child){margin-right:.75rem}}.level-left{align-items:center;justify-content:flex-start}@media screen and (max-width: 768px){.level-left+.level-right{margin-top:1.5rem}}@media screen and (min-width: 769px),print{.level-left{display:flex}}.level-right{align-items:center;justify-content:flex-end}@media screen and (min-width: 769px),print{.level-right{display:flex}}.list{background-color:#fff;border-radius:4px;box-shadow:0 2px 3px rgba(10,10,10,0.1),0 0 0 1px rgba(10,10,10,0.1)}.list-item{display:block;padding:0.5em 1em}.list-item:not(a){color:#222}.list-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-item:last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.list-item:not(:last-child){border-bottom:1px solid #dbdbdb}.list-item.is-active{background-color:#2e63b8;color:#fff}a.list-item{background-color:#f5f5f5;cursor:pointer}.media{align-items:flex-start;display:flex;text-align:left}.media .content:not(:last-child){margin-bottom:0.75rem}.media .media{border-top:1px solid rgba(219,219,219,0.5);display:flex;padding-top:0.75rem}.media .media .content:not(:last-child),.media .media .control:not(:last-child){margin-bottom:0.5rem}.media .media .media{padding-top:0.5rem}.media .media .media+.media{margin-top:0.5rem}.media+.media{border-top:1px solid rgba(219,219,219,0.5);margin-top:1rem;padding-top:1rem}.media.is-large+.media{margin-top:1.5rem;padding-top:1.5rem}.media-left,.media-right{flex-basis:auto;flex-grow:0;flex-shrink:0}.media-left{margin-right:1rem}.media-right{margin-left:1rem}.media-content{flex-basis:auto;flex-grow:1;flex-shrink:1;text-align:left}@media screen and (max-width: 768px){.media-content{overflow-x:auto}}.menu{font-size:1rem}.menu.is-small,#documenter .docs-sidebar form.docs-search>input.menu{font-size:.75rem}.menu.is-medium{font-size:1.25rem}.menu.is-large{font-size:1.5rem}.menu-list{line-height:1.25}.menu-list a{border-radius:2px;color:#222;display:block;padding:0.5em 0.75em}.menu-list a:hover{background-color:#f5f5f5;color:#222}.menu-list a.is-active{background-color:#2e63b8;color:#fff}.menu-list li ul{border-left:1px solid #dbdbdb;margin:.75em;padding-left:.75em}.menu-label{color:#6b6b6b;font-size:.75em;letter-spacing:.1em;text-transform:uppercase}.menu-label:not(:first-child){margin-top:1em}.menu-label:not(:last-child){margin-bottom:1em}.message{background-color:#f5f5f5;border-radius:4px;font-size:1rem}.message strong{color:currentColor}.message a:not(.button):not(.tag):not(.dropdown-item){color:currentColor;text-decoration:underline}.message.is-small,#documenter .docs-sidebar form.docs-search>input.message{font-size:.75rem}.message.is-medium{font-size:1.25rem}.message.is-large{font-size:1.5rem}.message.is-white{background-color:#fff}.message.is-white .message-header{background-color:#fff;color:#0a0a0a}.message.is-white .message-body{border-color:#fff;color:#4d4d4d}.message.is-black{background-color:#fafafa}.message.is-black .message-header{background-color:#0a0a0a;color:#fff}.message.is-black .message-body{border-color:#0a0a0a;color:#090909}.message.is-light{background-color:#fafafa}.message.is-light .message-header{background-color:#f5f5f5;color:#363636}.message.is-light .message-body{border-color:#f5f5f5;color:#505050}.message.is-dark,.content kbd.message{background-color:#fafafa}.message.is-dark .message-header,.content kbd.message .message-header{background-color:#363636;color:#f5f5f5}.message.is-dark .message-body,.content kbd.message .message-body{border-color:#363636;color:#2a2a2a}.message.is-primary,.docstring>section>a.message.docs-sourcelink{background-color:#f6fbfd}.message.is-primary .message-header,.docstring>section>a.message.docs-sourcelink .message-header{background-color:#4eb5de;color:#fff}.message.is-primary .message-body,.docstring>section>a.message.docs-sourcelink .message-body{border-color:#4eb5de;color:#1f556a}.message.is-link{background-color:#f7f9fd}.message.is-link .message-header{background-color:#2e63b8;color:#fff}.message.is-link .message-body{border-color:#2e63b8;color:#264981}.message.is-info{background-color:#f6fbfe}.message.is-info .message-header{background-color:#209cee;color:#fff}.message.is-info .message-body{border-color:#209cee;color:#12537d}.message.is-success{background-color:#f6fdf9}.message.is-success .message-header{background-color:#22c35b;color:#fff}.message.is-success .message-body{border-color:#22c35b;color:#0f361d}.message.is-warning{background-color:#fffdf5}.message.is-warning .message-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.message.is-warning .message-body{border-color:#ffdd57;color:#3c3108}.message.is-danger{background-color:#fff5f5}.message.is-danger .message-header{background-color:#da0b00;color:#fff}.message.is-danger .message-body{border-color:#da0b00;color:#9b0c04}.message-header{align-items:center;background-color:#222;border-radius:4px 4px 0 0;color:#fff;display:flex;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.75em 1em;position:relative}.message-header .delete{flex-grow:0;flex-shrink:0;margin-left:0.75em}.message-header+.message-body{border-width:0;border-top-left-radius:0;border-top-right-radius:0}.message-body{border-color:#dbdbdb;border-radius:4px;border-style:solid;border-width:0 0 0 4px;color:#222;padding:1.25em 1.5em}.message-body code,.message-body pre{background-color:#fff}.message-body pre code{background-color:rgba(0,0,0,0)}.modal{align-items:center;display:none;flex-direction:column;justify-content:center;overflow:hidden;position:fixed;z-index:40}.modal.is-active{display:flex}.modal-background{background-color:rgba(10,10,10,0.86)}.modal-content,.modal-card{margin:0 20px;max-height:calc(100vh - 160px);overflow:auto;position:relative;width:100%}@media screen and (min-width: 769px),print{.modal-content,.modal-card{margin:0 auto;max-height:calc(100vh - 40px);width:640px}}.modal-close{background:none;height:40px;position:fixed;right:20px;top:20px;width:40px}.modal-card{display:flex;flex-direction:column;max-height:calc(100vh - 40px);overflow:hidden;-ms-overflow-y:visible}.modal-card-head,.modal-card-foot{align-items:center;background-color:#f5f5f5;display:flex;flex-shrink:0;justify-content:flex-start;padding:20px;position:relative}.modal-card-head{border-bottom:1px solid #dbdbdb;border-top-left-radius:6px;border-top-right-radius:6px}.modal-card-title{color:#222;flex-grow:1;flex-shrink:0;font-size:1.5rem;line-height:1}.modal-card-foot{border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:1px solid #dbdbdb}.modal-card-foot .button:not(:last-child){margin-right:0.5em}.modal-card-body{-webkit-overflow-scrolling:touch;background-color:#fff;flex-grow:1;flex-shrink:1;overflow:auto;padding:20px}.navbar{background-color:#fff;min-height:3.25rem;position:relative;z-index:30}.navbar.is-white{background-color:#fff;color:#0a0a0a}.navbar.is-white .navbar-brand>.navbar-item,.navbar.is-white .navbar-brand .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-brand>a.navbar-item:focus,.navbar.is-white .navbar-brand>a.navbar-item:hover,.navbar.is-white .navbar-brand>a.navbar-item.is-active,.navbar.is-white .navbar-brand .navbar-link:focus,.navbar.is-white .navbar-brand .navbar-link:hover,.navbar.is-white .navbar-brand .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-brand .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-burger{color:#0a0a0a}@media screen and (min-width: 1056px){.navbar.is-white .navbar-start>.navbar-item,.navbar.is-white .navbar-start .navbar-link,.navbar.is-white .navbar-end>.navbar-item,.navbar.is-white .navbar-end .navbar-link{color:#0a0a0a}.navbar.is-white .navbar-start>a.navbar-item:focus,.navbar.is-white .navbar-start>a.navbar-item:hover,.navbar.is-white .navbar-start>a.navbar-item.is-active,.navbar.is-white .navbar-start .navbar-link:focus,.navbar.is-white .navbar-start .navbar-link:hover,.navbar.is-white .navbar-start .navbar-link.is-active,.navbar.is-white .navbar-end>a.navbar-item:focus,.navbar.is-white .navbar-end>a.navbar-item:hover,.navbar.is-white .navbar-end>a.navbar-item.is-active,.navbar.is-white .navbar-end .navbar-link:focus,.navbar.is-white .navbar-end .navbar-link:hover,.navbar.is-white .navbar-end .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-start .navbar-link::after,.navbar.is-white .navbar-end .navbar-link::after{border-color:#0a0a0a}.navbar.is-white .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-white .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-white .navbar-item.has-dropdown.is-active .navbar-link{background-color:#f2f2f2;color:#0a0a0a}.navbar.is-white .navbar-dropdown a.navbar-item.is-active{background-color:#fff;color:#0a0a0a}}.navbar.is-black{background-color:#0a0a0a;color:#fff}.navbar.is-black .navbar-brand>.navbar-item,.navbar.is-black .navbar-brand .navbar-link{color:#fff}.navbar.is-black .navbar-brand>a.navbar-item:focus,.navbar.is-black .navbar-brand>a.navbar-item:hover,.navbar.is-black .navbar-brand>a.navbar-item.is-active,.navbar.is-black .navbar-brand .navbar-link:focus,.navbar.is-black .navbar-brand .navbar-link:hover,.navbar.is-black .navbar-brand .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-black .navbar-start>.navbar-item,.navbar.is-black .navbar-start .navbar-link,.navbar.is-black .navbar-end>.navbar-item,.navbar.is-black .navbar-end .navbar-link{color:#fff}.navbar.is-black .navbar-start>a.navbar-item:focus,.navbar.is-black .navbar-start>a.navbar-item:hover,.navbar.is-black .navbar-start>a.navbar-item.is-active,.navbar.is-black .navbar-start .navbar-link:focus,.navbar.is-black .navbar-start .navbar-link:hover,.navbar.is-black .navbar-start .navbar-link.is-active,.navbar.is-black .navbar-end>a.navbar-item:focus,.navbar.is-black .navbar-end>a.navbar-item:hover,.navbar.is-black .navbar-end>a.navbar-item.is-active,.navbar.is-black .navbar-end .navbar-link:focus,.navbar.is-black .navbar-end .navbar-link:hover,.navbar.is-black .navbar-end .navbar-link.is-active{background-color:#000;color:#fff}.navbar.is-black .navbar-start .navbar-link::after,.navbar.is-black .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-black .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-black .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-black .navbar-item.has-dropdown.is-active .navbar-link{background-color:#000;color:#fff}.navbar.is-black .navbar-dropdown a.navbar-item.is-active{background-color:#0a0a0a;color:#fff}}.navbar.is-light{background-color:#f5f5f5;color:#363636}.navbar.is-light .navbar-brand>.navbar-item,.navbar.is-light .navbar-brand .navbar-link{color:#363636}.navbar.is-light .navbar-brand>a.navbar-item:focus,.navbar.is-light .navbar-brand>a.navbar-item:hover,.navbar.is-light .navbar-brand>a.navbar-item.is-active,.navbar.is-light .navbar-brand .navbar-link:focus,.navbar.is-light .navbar-brand .navbar-link:hover,.navbar.is-light .navbar-brand .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-brand .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-burger{color:#363636}@media screen and (min-width: 1056px){.navbar.is-light .navbar-start>.navbar-item,.navbar.is-light .navbar-start .navbar-link,.navbar.is-light .navbar-end>.navbar-item,.navbar.is-light .navbar-end .navbar-link{color:#363636}.navbar.is-light .navbar-start>a.navbar-item:focus,.navbar.is-light .navbar-start>a.navbar-item:hover,.navbar.is-light .navbar-start>a.navbar-item.is-active,.navbar.is-light .navbar-start .navbar-link:focus,.navbar.is-light .navbar-start .navbar-link:hover,.navbar.is-light .navbar-start .navbar-link.is-active,.navbar.is-light .navbar-end>a.navbar-item:focus,.navbar.is-light .navbar-end>a.navbar-item:hover,.navbar.is-light .navbar-end>a.navbar-item.is-active,.navbar.is-light .navbar-end .navbar-link:focus,.navbar.is-light .navbar-end .navbar-link:hover,.navbar.is-light .navbar-end .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-start .navbar-link::after,.navbar.is-light .navbar-end .navbar-link::after{border-color:#363636}.navbar.is-light .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-light .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-light .navbar-item.has-dropdown.is-active .navbar-link{background-color:#e8e8e8;color:#363636}.navbar.is-light .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#363636}}.navbar.is-dark,.content kbd.navbar{background-color:#363636;color:#f5f5f5}.navbar.is-dark .navbar-brand>.navbar-item,.content kbd.navbar .navbar-brand>.navbar-item,.navbar.is-dark .navbar-brand .navbar-link,.content kbd.navbar .navbar-brand .navbar-link{color:#f5f5f5}.navbar.is-dark .navbar-brand>a.navbar-item:focus,.content kbd.navbar .navbar-brand>a.navbar-item:focus,.navbar.is-dark .navbar-brand>a.navbar-item:hover,.content kbd.navbar .navbar-brand>a.navbar-item:hover,.navbar.is-dark .navbar-brand>a.navbar-item.is-active,.content kbd.navbar .navbar-brand>a.navbar-item.is-active,.navbar.is-dark .navbar-brand .navbar-link:focus,.content kbd.navbar .navbar-brand .navbar-link:focus,.navbar.is-dark .navbar-brand .navbar-link:hover,.content kbd.navbar .navbar-brand .navbar-link:hover,.navbar.is-dark .navbar-brand .navbar-link.is-active,.content kbd.navbar .navbar-brand .navbar-link.is-active{background-color:#292929;color:#f5f5f5}.navbar.is-dark .navbar-brand .navbar-link::after,.content kbd.navbar .navbar-brand .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark .navbar-burger,.content kbd.navbar .navbar-burger{color:#f5f5f5}@media screen and (min-width: 1056px){.navbar.is-dark .navbar-start>.navbar-item,.content kbd.navbar .navbar-start>.navbar-item,.navbar.is-dark .navbar-start .navbar-link,.content kbd.navbar .navbar-start .navbar-link,.navbar.is-dark .navbar-end>.navbar-item,.content kbd.navbar .navbar-end>.navbar-item,.navbar.is-dark .navbar-end .navbar-link,.content kbd.navbar .navbar-end .navbar-link{color:#f5f5f5}.navbar.is-dark .navbar-start>a.navbar-item:focus,.content kbd.navbar .navbar-start>a.navbar-item:focus,.navbar.is-dark .navbar-start>a.navbar-item:hover,.content kbd.navbar .navbar-start>a.navbar-item:hover,.navbar.is-dark .navbar-start>a.navbar-item.is-active,.content kbd.navbar .navbar-start>a.navbar-item.is-active,.navbar.is-dark .navbar-start .navbar-link:focus,.content kbd.navbar .navbar-start .navbar-link:focus,.navbar.is-dark .navbar-start .navbar-link:hover,.content kbd.navbar .navbar-start .navbar-link:hover,.navbar.is-dark .navbar-start .navbar-link.is-active,.content kbd.navbar .navbar-start .navbar-link.is-active,.navbar.is-dark .navbar-end>a.navbar-item:focus,.content kbd.navbar .navbar-end>a.navbar-item:focus,.navbar.is-dark .navbar-end>a.navbar-item:hover,.content kbd.navbar .navbar-end>a.navbar-item:hover,.navbar.is-dark .navbar-end>a.navbar-item.is-active,.content kbd.navbar .navbar-end>a.navbar-item.is-active,.navbar.is-dark .navbar-end .navbar-link:focus,.content kbd.navbar .navbar-end .navbar-link:focus,.navbar.is-dark .navbar-end .navbar-link:hover,.content kbd.navbar .navbar-end .navbar-link:hover,.navbar.is-dark .navbar-end .navbar-link.is-active,.content kbd.navbar .navbar-end .navbar-link.is-active{background-color:#292929;color:#f5f5f5}.navbar.is-dark .navbar-start .navbar-link::after,.content kbd.navbar .navbar-start .navbar-link::after,.navbar.is-dark .navbar-end .navbar-link::after,.content kbd.navbar .navbar-end .navbar-link::after{border-color:#f5f5f5}.navbar.is-dark .navbar-item.has-dropdown:focus .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-dark .navbar-item.has-dropdown:hover .navbar-link,.content kbd.navbar .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-dark .navbar-item.has-dropdown.is-active .navbar-link,.content kbd.navbar .navbar-item.has-dropdown.is-active .navbar-link{background-color:#292929;color:#f5f5f5}.navbar.is-dark .navbar-dropdown a.navbar-item.is-active,.content kbd.navbar .navbar-dropdown a.navbar-item.is-active{background-color:#363636;color:#f5f5f5}}.navbar.is-primary,.docstring>section>a.navbar.docs-sourcelink{background-color:#4eb5de;color:#fff}.navbar.is-primary .navbar-brand>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>.navbar-item,.navbar.is-primary .navbar-brand .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link{color:#fff}.navbar.is-primary .navbar-brand>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:focus,.navbar.is-primary .navbar-brand>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item:hover,.navbar.is-primary .navbar-brand>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand>a.navbar-item.is-active,.navbar.is-primary .navbar-brand .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:focus,.navbar.is-primary .navbar-brand .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link:hover,.navbar.is-primary .navbar-brand .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-brand .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-burger,.docstring>section>a.navbar.docs-sourcelink .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-primary .navbar-start>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-start>.navbar-item,.navbar.is-primary .navbar-start .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link,.navbar.is-primary .navbar-end>.navbar-item,.docstring>section>a.navbar.docs-sourcelink .navbar-end>.navbar-item,.navbar.is-primary .navbar-end .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link{color:#fff}.navbar.is-primary .navbar-start>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:focus,.navbar.is-primary .navbar-start>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item:hover,.navbar.is-primary .navbar-start>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start>a.navbar-item.is-active,.navbar.is-primary .navbar-start .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:focus,.navbar.is-primary .navbar-start .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link:hover,.navbar.is-primary .navbar-start .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link.is-active,.navbar.is-primary .navbar-end>a.navbar-item:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:focus,.navbar.is-primary .navbar-end>a.navbar-item:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item:hover,.navbar.is-primary .navbar-end>a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end>a.navbar-item.is-active,.navbar.is-primary .navbar-end .navbar-link:focus,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:focus,.navbar.is-primary .navbar-end .navbar-link:hover,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link:hover,.navbar.is-primary .navbar-end .navbar-link.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link.is-active{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-start .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-start .navbar-link::after,.navbar.is-primary .navbar-end .navbar-link::after,.docstring>section>a.navbar.docs-sourcelink .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-primary .navbar-item.has-dropdown:focus .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-primary .navbar-item.has-dropdown:hover .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-primary .navbar-item.has-dropdown.is-active .navbar-link,.docstring>section>a.navbar.docs-sourcelink .navbar-item.has-dropdown.is-active .navbar-link{background-color:#39acda;color:#fff}.navbar.is-primary .navbar-dropdown a.navbar-item.is-active,.docstring>section>a.navbar.docs-sourcelink .navbar-dropdown a.navbar-item.is-active{background-color:#4eb5de;color:#fff}}.navbar.is-link{background-color:#2e63b8;color:#fff}.navbar.is-link .navbar-brand>.navbar-item,.navbar.is-link .navbar-brand .navbar-link{color:#fff}.navbar.is-link .navbar-brand>a.navbar-item:focus,.navbar.is-link .navbar-brand>a.navbar-item:hover,.navbar.is-link .navbar-brand>a.navbar-item.is-active,.navbar.is-link .navbar-brand .navbar-link:focus,.navbar.is-link .navbar-brand .navbar-link:hover,.navbar.is-link .navbar-brand .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-link .navbar-start>.navbar-item,.navbar.is-link .navbar-start .navbar-link,.navbar.is-link .navbar-end>.navbar-item,.navbar.is-link .navbar-end .navbar-link{color:#fff}.navbar.is-link .navbar-start>a.navbar-item:focus,.navbar.is-link .navbar-start>a.navbar-item:hover,.navbar.is-link .navbar-start>a.navbar-item.is-active,.navbar.is-link .navbar-start .navbar-link:focus,.navbar.is-link .navbar-start .navbar-link:hover,.navbar.is-link .navbar-start .navbar-link.is-active,.navbar.is-link .navbar-end>a.navbar-item:focus,.navbar.is-link .navbar-end>a.navbar-item:hover,.navbar.is-link .navbar-end>a.navbar-item.is-active,.navbar.is-link .navbar-end .navbar-link:focus,.navbar.is-link .navbar-end .navbar-link:hover,.navbar.is-link .navbar-end .navbar-link.is-active{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-start .navbar-link::after,.navbar.is-link .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-link .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-link .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-link .navbar-item.has-dropdown.is-active .navbar-link{background-color:#2958a4;color:#fff}.navbar.is-link .navbar-dropdown a.navbar-item.is-active{background-color:#2e63b8;color:#fff}}.navbar.is-info{background-color:#209cee;color:#fff}.navbar.is-info .navbar-brand>.navbar-item,.navbar.is-info .navbar-brand .navbar-link{color:#fff}.navbar.is-info .navbar-brand>a.navbar-item:focus,.navbar.is-info .navbar-brand>a.navbar-item:hover,.navbar.is-info .navbar-brand>a.navbar-item.is-active,.navbar.is-info .navbar-brand .navbar-link:focus,.navbar.is-info .navbar-brand .navbar-link:hover,.navbar.is-info .navbar-brand .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-info .navbar-start>.navbar-item,.navbar.is-info .navbar-start .navbar-link,.navbar.is-info .navbar-end>.navbar-item,.navbar.is-info .navbar-end .navbar-link{color:#fff}.navbar.is-info .navbar-start>a.navbar-item:focus,.navbar.is-info .navbar-start>a.navbar-item:hover,.navbar.is-info .navbar-start>a.navbar-item.is-active,.navbar.is-info .navbar-start .navbar-link:focus,.navbar.is-info .navbar-start .navbar-link:hover,.navbar.is-info .navbar-start .navbar-link.is-active,.navbar.is-info .navbar-end>a.navbar-item:focus,.navbar.is-info .navbar-end>a.navbar-item:hover,.navbar.is-info .navbar-end>a.navbar-item.is-active,.navbar.is-info .navbar-end .navbar-link:focus,.navbar.is-info .navbar-end .navbar-link:hover,.navbar.is-info .navbar-end .navbar-link.is-active{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-start .navbar-link::after,.navbar.is-info .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-info .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-info .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-info .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1190e3;color:#fff}.navbar.is-info .navbar-dropdown a.navbar-item.is-active{background-color:#209cee;color:#fff}}.navbar.is-success{background-color:#22c35b;color:#fff}.navbar.is-success .navbar-brand>.navbar-item,.navbar.is-success .navbar-brand .navbar-link{color:#fff}.navbar.is-success .navbar-brand>a.navbar-item:focus,.navbar.is-success .navbar-brand>a.navbar-item:hover,.navbar.is-success .navbar-brand>a.navbar-item.is-active,.navbar.is-success .navbar-brand .navbar-link:focus,.navbar.is-success .navbar-brand .navbar-link:hover,.navbar.is-success .navbar-brand .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-success .navbar-start>.navbar-item,.navbar.is-success .navbar-start .navbar-link,.navbar.is-success .navbar-end>.navbar-item,.navbar.is-success .navbar-end .navbar-link{color:#fff}.navbar.is-success .navbar-start>a.navbar-item:focus,.navbar.is-success .navbar-start>a.navbar-item:hover,.navbar.is-success .navbar-start>a.navbar-item.is-active,.navbar.is-success .navbar-start .navbar-link:focus,.navbar.is-success .navbar-start .navbar-link:hover,.navbar.is-success .navbar-start .navbar-link.is-active,.navbar.is-success .navbar-end>a.navbar-item:focus,.navbar.is-success .navbar-end>a.navbar-item:hover,.navbar.is-success .navbar-end>a.navbar-item.is-active,.navbar.is-success .navbar-end .navbar-link:focus,.navbar.is-success .navbar-end .navbar-link:hover,.navbar.is-success .navbar-end .navbar-link.is-active{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-start .navbar-link::after,.navbar.is-success .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-success .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-success .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-success .navbar-item.has-dropdown.is-active .navbar-link{background-color:#1ead51;color:#fff}.navbar.is-success .navbar-dropdown a.navbar-item.is-active{background-color:#22c35b;color:#fff}}.navbar.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>.navbar-item,.navbar.is-warning .navbar-brand .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand>a.navbar-item:focus,.navbar.is-warning .navbar-brand>a.navbar-item:hover,.navbar.is-warning .navbar-brand>a.navbar-item.is-active,.navbar.is-warning .navbar-brand .navbar-link:focus,.navbar.is-warning .navbar-brand .navbar-link:hover,.navbar.is-warning .navbar-brand .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-brand .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-burger{color:rgba(0,0,0,0.7)}@media screen and (min-width: 1056px){.navbar.is-warning .navbar-start>.navbar-item,.navbar.is-warning .navbar-start .navbar-link,.navbar.is-warning .navbar-end>.navbar-item,.navbar.is-warning .navbar-end .navbar-link{color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start>a.navbar-item:focus,.navbar.is-warning .navbar-start>a.navbar-item:hover,.navbar.is-warning .navbar-start>a.navbar-item.is-active,.navbar.is-warning .navbar-start .navbar-link:focus,.navbar.is-warning .navbar-start .navbar-link:hover,.navbar.is-warning .navbar-start .navbar-link.is-active,.navbar.is-warning .navbar-end>a.navbar-item:focus,.navbar.is-warning .navbar-end>a.navbar-item:hover,.navbar.is-warning .navbar-end>a.navbar-item.is-active,.navbar.is-warning .navbar-end .navbar-link:focus,.navbar.is-warning .navbar-end .navbar-link:hover,.navbar.is-warning .navbar-end .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-start .navbar-link::after,.navbar.is-warning .navbar-end .navbar-link::after{border-color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-warning .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-warning .navbar-item.has-dropdown.is-active .navbar-link{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.navbar.is-warning .navbar-dropdown a.navbar-item.is-active{background-color:#ffdd57;color:rgba(0,0,0,0.7)}}.navbar.is-danger{background-color:#da0b00;color:#fff}.navbar.is-danger .navbar-brand>.navbar-item,.navbar.is-danger .navbar-brand .navbar-link{color:#fff}.navbar.is-danger .navbar-brand>a.navbar-item:focus,.navbar.is-danger .navbar-brand>a.navbar-item:hover,.navbar.is-danger .navbar-brand>a.navbar-item.is-active,.navbar.is-danger .navbar-brand .navbar-link:focus,.navbar.is-danger .navbar-brand .navbar-link:hover,.navbar.is-danger .navbar-brand .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-brand .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-burger{color:#fff}@media screen and (min-width: 1056px){.navbar.is-danger .navbar-start>.navbar-item,.navbar.is-danger .navbar-start .navbar-link,.navbar.is-danger .navbar-end>.navbar-item,.navbar.is-danger .navbar-end .navbar-link{color:#fff}.navbar.is-danger .navbar-start>a.navbar-item:focus,.navbar.is-danger .navbar-start>a.navbar-item:hover,.navbar.is-danger .navbar-start>a.navbar-item.is-active,.navbar.is-danger .navbar-start .navbar-link:focus,.navbar.is-danger .navbar-start .navbar-link:hover,.navbar.is-danger .navbar-start .navbar-link.is-active,.navbar.is-danger .navbar-end>a.navbar-item:focus,.navbar.is-danger .navbar-end>a.navbar-item:hover,.navbar.is-danger .navbar-end>a.navbar-item.is-active,.navbar.is-danger .navbar-end .navbar-link:focus,.navbar.is-danger .navbar-end .navbar-link:hover,.navbar.is-danger .navbar-end .navbar-link.is-active{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-start .navbar-link::after,.navbar.is-danger .navbar-end .navbar-link::after{border-color:#fff}.navbar.is-danger .navbar-item.has-dropdown:focus .navbar-link,.navbar.is-danger .navbar-item.has-dropdown:hover .navbar-link,.navbar.is-danger .navbar-item.has-dropdown.is-active .navbar-link{background-color:#c10a00;color:#fff}.navbar.is-danger .navbar-dropdown a.navbar-item.is-active{background-color:#da0b00;color:#fff}}.navbar>.container{align-items:stretch;display:flex;min-height:3.25rem;width:100%}.navbar.has-shadow{box-shadow:0 2px 0 0 #f5f5f5}.navbar.is-fixed-bottom,.navbar.is-fixed-top{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom{bottom:0}.navbar.is-fixed-bottom.has-shadow{box-shadow:0 -2px 0 0 #f5f5f5}.navbar.is-fixed-top{top:0}html.has-navbar-fixed-top,body.has-navbar-fixed-top{padding-top:3.25rem}html.has-navbar-fixed-bottom,body.has-navbar-fixed-bottom{padding-bottom:3.25rem}.navbar-brand,.navbar-tabs{align-items:stretch;display:flex;flex-shrink:0;min-height:3.25rem}.navbar-brand a.navbar-item:focus,.navbar-brand a.navbar-item:hover{background-color:transparent}.navbar-tabs{-webkit-overflow-scrolling:touch;max-width:100vw;overflow-x:auto;overflow-y:hidden}.navbar-burger{color:#4a4a4a;cursor:pointer;display:block;height:3.25rem;position:relative;width:3.25rem;margin-left:auto}.navbar-burger span{background-color:currentColor;display:block;height:1px;left:calc(50% - 8px);position:absolute;transform-origin:center;transition-duration:86ms;transition-property:background-color, opacity, transform;transition-timing-function:ease-out;width:16px}.navbar-burger span:nth-child(1){top:calc(50% - 6px)}.navbar-burger span:nth-child(2){top:calc(50% - 1px)}.navbar-burger span:nth-child(3){top:calc(50% + 4px)}.navbar-burger:hover{background-color:rgba(0,0,0,0.05)}.navbar-burger.is-active span:nth-child(1){transform:translateY(5px) rotate(45deg)}.navbar-burger.is-active span:nth-child(2){opacity:0}.navbar-burger.is-active span:nth-child(3){transform:translateY(-5px) rotate(-45deg)}.navbar-menu{display:none}.navbar-item,.navbar-link{color:#4a4a4a;display:block;line-height:1.5;padding:0.5rem 0.75rem;position:relative}.navbar-item .icon:only-child,.navbar-link .icon:only-child{margin-left:-0.25rem;margin-right:-0.25rem}a.navbar-item,.navbar-link{cursor:pointer}a.navbar-item:focus,a.navbar-item:focus-within,a.navbar-item:hover,a.navbar-item.is-active,.navbar-link:focus,.navbar-link:focus-within,.navbar-link:hover,.navbar-link.is-active{background-color:#fafafa;color:#2e63b8}.navbar-item{display:block;flex-grow:0;flex-shrink:0}.navbar-item img{max-height:1.75rem}.navbar-item.has-dropdown{padding:0}.navbar-item.is-expanded{flex-grow:1;flex-shrink:1}.navbar-item.is-tab{border-bottom:1px solid transparent;min-height:3.25rem;padding-bottom:calc(0.5rem - 1px)}.navbar-item.is-tab:focus,.navbar-item.is-tab:hover{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8}.navbar-item.is-tab.is-active{background-color:rgba(0,0,0,0);border-bottom-color:#2e63b8;border-bottom-style:solid;border-bottom-width:3px;color:#2e63b8;padding-bottom:calc(0.5rem - 3px)}.navbar-content{flex-grow:1;flex-shrink:1}.navbar-link:not(.is-arrowless){padding-right:2.5em}.navbar-link:not(.is-arrowless)::after{border-color:#2e63b8;margin-top:-0.375em;right:1.125em}.navbar-dropdown{font-size:0.875rem;padding-bottom:0.5rem;padding-top:0.5rem}.navbar-dropdown .navbar-item{padding-left:1.5rem;padding-right:1.5rem}.navbar-divider{background-color:#f5f5f5;border:none;display:none;height:2px;margin:0.5rem 0}@media screen and (max-width: 1055px){.navbar>.container{display:block}.navbar-brand .navbar-item,.navbar-tabs .navbar-item{align-items:center;display:flex}.navbar-link::after{display:none}.navbar-menu{background-color:#fff;box-shadow:0 8px 16px rgba(10,10,10,0.1);padding:0.5rem 0}.navbar-menu.is-active{display:block}.navbar.is-fixed-bottom-touch,.navbar.is-fixed-top-touch{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-touch{bottom:0}.navbar.is-fixed-bottom-touch.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-touch{top:0}.navbar.is-fixed-top .navbar-menu,.navbar.is-fixed-top-touch .navbar-menu{-webkit-overflow-scrolling:touch;max-height:calc(100vh - 3.25rem);overflow:auto}html.has-navbar-fixed-top-touch,body.has-navbar-fixed-top-touch{padding-top:3.25rem}html.has-navbar-fixed-bottom-touch,body.has-navbar-fixed-bottom-touch{padding-bottom:3.25rem}}@media screen and (min-width: 1056px){.navbar,.navbar-menu,.navbar-start,.navbar-end{align-items:stretch;display:flex}.navbar{min-height:3.25rem}.navbar.is-spaced{padding:1rem 2rem}.navbar.is-spaced .navbar-start,.navbar.is-spaced .navbar-end{align-items:center}.navbar.is-spaced a.navbar-item,.navbar.is-spaced .navbar-link{border-radius:4px}.navbar.is-transparent a.navbar-item:focus,.navbar.is-transparent a.navbar-item:hover,.navbar.is-transparent a.navbar-item.is-active,.navbar.is-transparent .navbar-link:focus,.navbar.is-transparent .navbar-link:hover,.navbar.is-transparent .navbar-link.is-active{background-color:transparent !important}.navbar.is-transparent .navbar-item.has-dropdown.is-active .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:focus-within .navbar-link,.navbar.is-transparent .navbar-item.has-dropdown.is-hoverable:hover .navbar-link{background-color:transparent !important}.navbar.is-transparent .navbar-dropdown a.navbar-item:focus,.navbar.is-transparent .navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar.is-transparent .navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar-burger{display:none}.navbar-item,.navbar-link{align-items:center;display:flex}.navbar-item{display:flex}.navbar-item.has-dropdown{align-items:stretch}.navbar-item.has-dropdown-up .navbar-link::after{transform:rotate(135deg) translate(0.25em, -0.25em)}.navbar-item.has-dropdown-up .navbar-dropdown{border-bottom:2px solid #dbdbdb;border-radius:6px 6px 0 0;border-top:none;bottom:100%;box-shadow:0 -8px 8px rgba(10,10,10,0.1);top:auto}.navbar-item.is-active .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown{display:block}.navbar.is-spaced .navbar-item.is-active .navbar-dropdown,.navbar-item.is-active .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus .navbar-dropdown,.navbar-item.is-hoverable:focus .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:focus-within .navbar-dropdown,.navbar-item.is-hoverable:focus-within .navbar-dropdown.is-boxed,.navbar.is-spaced .navbar-item.is-hoverable:hover .navbar-dropdown,.navbar-item.is-hoverable:hover .navbar-dropdown.is-boxed{opacity:1;pointer-events:auto;transform:translateY(0)}.navbar-menu{flex-grow:1;flex-shrink:0}.navbar-start{justify-content:flex-start;margin-right:auto}.navbar-end{justify-content:flex-end;margin-left:auto}.navbar-dropdown{background-color:#fff;border-bottom-left-radius:6px;border-bottom-right-radius:6px;border-top:2px solid #dbdbdb;box-shadow:0 8px 8px rgba(10,10,10,0.1);display:none;font-size:0.875rem;left:0;min-width:100%;position:absolute;top:100%;z-index:20}.navbar-dropdown .navbar-item{padding:0.375rem 1rem;white-space:nowrap}.navbar-dropdown a.navbar-item{padding-right:3rem}.navbar-dropdown a.navbar-item:focus,.navbar-dropdown a.navbar-item:hover{background-color:#f5f5f5;color:#0a0a0a}.navbar-dropdown a.navbar-item.is-active{background-color:#f5f5f5;color:#2e63b8}.navbar.is-spaced .navbar-dropdown,.navbar-dropdown.is-boxed{border-radius:6px;border-top:none;box-shadow:0 8px 8px rgba(10,10,10,0.1), 0 0 0 1px rgba(10,10,10,0.1);display:block;opacity:0;pointer-events:none;top:calc(100% + (-4px));transform:translateY(-5px);transition-duration:86ms;transition-property:opacity, transform}.navbar-dropdown.is-right{left:auto;right:0}.navbar-divider{display:block}.navbar>.container .navbar-brand,.container>.navbar .navbar-brand{margin-left:-.75rem}.navbar>.container .navbar-menu,.container>.navbar .navbar-menu{margin-right:-.75rem}.navbar.is-fixed-bottom-desktop,.navbar.is-fixed-top-desktop{left:0;position:fixed;right:0;z-index:30}.navbar.is-fixed-bottom-desktop{bottom:0}.navbar.is-fixed-bottom-desktop.has-shadow{box-shadow:0 -2px 3px rgba(10,10,10,0.1)}.navbar.is-fixed-top-desktop{top:0}html.has-navbar-fixed-top-desktop,body.has-navbar-fixed-top-desktop{padding-top:3.25rem}html.has-navbar-fixed-bottom-desktop,body.has-navbar-fixed-bottom-desktop{padding-bottom:3.25rem}html.has-spaced-navbar-fixed-top,body.has-spaced-navbar-fixed-top{padding-top:5.25rem}html.has-spaced-navbar-fixed-bottom,body.has-spaced-navbar-fixed-bottom{padding-bottom:5.25rem}a.navbar-item.is-active,.navbar-link.is-active{color:#0a0a0a}a.navbar-item.is-active:not(:focus):not(:hover),.navbar-link.is-active:not(:focus):not(:hover){background-color:rgba(0,0,0,0)}.navbar-item.has-dropdown:focus .navbar-link,.navbar-item.has-dropdown:hover .navbar-link,.navbar-item.has-dropdown.is-active .navbar-link{background-color:#fafafa}}.hero.is-fullheight-with-navbar{min-height:calc(100vh - 3.25rem)}.pagination{font-size:1rem;margin:-.25rem}.pagination.is-small,#documenter .docs-sidebar form.docs-search>input.pagination{font-size:.75rem}.pagination.is-medium{font-size:1.25rem}.pagination.is-large{font-size:1.5rem}.pagination.is-rounded .pagination-previous,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-previous,.pagination.is-rounded .pagination-next,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-next{padding-left:1em;padding-right:1em;border-radius:290486px}.pagination.is-rounded .pagination-link,#documenter .docs-sidebar form.docs-search>input.pagination .pagination-link{border-radius:290486px}.pagination,.pagination-list{align-items:center;display:flex;justify-content:center;text-align:center}.pagination-previous,.pagination-next,.pagination-link,.pagination-ellipsis{font-size:1em;justify-content:center;margin:.25rem;padding-left:.5em;padding-right:.5em;text-align:center}.pagination-previous,.pagination-next,.pagination-link{border-color:#dbdbdb;color:#363636;min-width:2.25em}.pagination-previous:hover,.pagination-next:hover,.pagination-link:hover{border-color:#b5b5b5;color:#363636}.pagination-previous:focus,.pagination-next:focus,.pagination-link:focus{border-color:#3c5dcd}.pagination-previous:active,.pagination-next:active,.pagination-link:active{box-shadow:inset 0 1px 2px rgba(10,10,10,0.2)}.pagination-previous[disabled],.pagination-next[disabled],.pagination-link[disabled]{background-color:#dbdbdb;border-color:#dbdbdb;box-shadow:none;color:#6b6b6b;opacity:0.5}.pagination-previous,.pagination-next{padding-left:0.75em;padding-right:0.75em;white-space:nowrap}.pagination-link.is-current{background-color:#2e63b8;border-color:#2e63b8;color:#fff}.pagination-ellipsis{color:#b5b5b5;pointer-events:none}.pagination-list{flex-wrap:wrap}@media screen and (max-width: 768px){.pagination{flex-wrap:wrap}.pagination-previous,.pagination-next{flex-grow:1;flex-shrink:1}.pagination-list li{flex-grow:1;flex-shrink:1}}@media screen and (min-width: 769px),print{.pagination-list{flex-grow:1;flex-shrink:1;justify-content:flex-start;order:1}.pagination-previous{order:2}.pagination-next{order:3}.pagination{justify-content:space-between}.pagination.is-centered .pagination-previous{order:1}.pagination.is-centered .pagination-list{justify-content:center;order:2}.pagination.is-centered .pagination-next{order:3}.pagination.is-right .pagination-previous{order:1}.pagination.is-right .pagination-next{order:2}.pagination.is-right .pagination-list{justify-content:flex-end;order:3}}.panel{font-size:1rem}.panel:not(:last-child){margin-bottom:1.5rem}.panel-heading,.panel-tabs,.panel-block{border-bottom:1px solid #dbdbdb;border-left:1px solid #dbdbdb;border-right:1px solid #dbdbdb}.panel-heading:first-child,.panel-tabs:first-child,.panel-block:first-child{border-top:1px solid #dbdbdb}.panel-heading{background-color:#f5f5f5;border-radius:4px 4px 0 0;color:#222;font-size:1.25em;font-weight:300;line-height:1.25;padding:0.5em 0.75em}.panel-tabs{align-items:flex-end;display:flex;font-size:.875em;justify-content:center}.panel-tabs a{border-bottom:1px solid #dbdbdb;margin-bottom:-1px;padding:0.5em}.panel-tabs a.is-active{border-bottom-color:#4a4a4a;color:#363636}.panel-list a{color:#222}.panel-list a:hover{color:#2e63b8}.panel-block{align-items:center;color:#222;display:flex;justify-content:flex-start;padding:0.5em 0.75em}.panel-block input[type="checkbox"]{margin-right:0.75em}.panel-block>.control{flex-grow:1;flex-shrink:1;width:100%}.panel-block.is-wrapped{flex-wrap:wrap}.panel-block.is-active{border-left-color:#2e63b8;color:#363636}.panel-block.is-active .panel-icon{color:#2e63b8}a.panel-block,label.panel-block{cursor:pointer}a.panel-block:hover,label.panel-block:hover{background-color:#f5f5f5}.panel-icon{display:inline-block;font-size:14px;height:1em;line-height:1em;text-align:center;vertical-align:top;width:1em;color:#6b6b6b;margin-right:0.75em}.panel-icon .fa{font-size:inherit;line-height:inherit}.tabs{-webkit-overflow-scrolling:touch;align-items:stretch;display:flex;font-size:1rem;justify-content:space-between;overflow:hidden;overflow-x:auto;white-space:nowrap}.tabs a{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;color:#222;display:flex;justify-content:center;margin-bottom:-1px;padding:0.5em 1em;vertical-align:top}.tabs a:hover{border-bottom-color:#222;color:#222}.tabs li{display:block}.tabs li.is-active a{border-bottom-color:#2e63b8;color:#2e63b8}.tabs ul{align-items:center;border-bottom-color:#dbdbdb;border-bottom-style:solid;border-bottom-width:1px;display:flex;flex-grow:1;flex-shrink:0;justify-content:flex-start}.tabs ul.is-left{padding-right:0.75em}.tabs ul.is-center{flex:none;justify-content:center;padding-left:0.75em;padding-right:0.75em}.tabs ul.is-right{justify-content:flex-end;padding-left:0.75em}.tabs .icon:first-child{margin-right:0.5em}.tabs .icon:last-child{margin-left:0.5em}.tabs.is-centered ul{justify-content:center}.tabs.is-right ul{justify-content:flex-end}.tabs.is-boxed a{border:1px solid transparent;border-radius:4px 4px 0 0}.tabs.is-boxed a:hover{background-color:#f5f5f5;border-bottom-color:#dbdbdb}.tabs.is-boxed li.is-active a{background-color:#fff;border-color:#dbdbdb;border-bottom-color:rgba(0,0,0,0) !important}.tabs.is-fullwidth li{flex-grow:1;flex-shrink:0}.tabs.is-toggle a{border-color:#dbdbdb;border-style:solid;border-width:1px;margin-bottom:0;position:relative}.tabs.is-toggle a:hover{background-color:#f5f5f5;border-color:#b5b5b5;z-index:2}.tabs.is-toggle li+li{margin-left:-1px}.tabs.is-toggle li:first-child a{border-radius:4px 0 0 4px}.tabs.is-toggle li:last-child a{border-radius:0 4px 4px 0}.tabs.is-toggle li.is-active a{background-color:#2e63b8;border-color:#2e63b8;color:#fff;z-index:1}.tabs.is-toggle ul{border-bottom:none}.tabs.is-toggle.is-toggle-rounded li:first-child a{border-bottom-left-radius:290486px;border-top-left-radius:290486px;padding-left:1.25em}.tabs.is-toggle.is-toggle-rounded li:last-child a{border-bottom-right-radius:290486px;border-top-right-radius:290486px;padding-right:1.25em}.tabs.is-small,#documenter .docs-sidebar form.docs-search>input.tabs{font-size:.75rem}.tabs.is-medium{font-size:1.25rem}.tabs.is-large{font-size:1.5rem}.column{display:block;flex-basis:0;flex-grow:1;flex-shrink:1;padding:.75rem}.columns.is-mobile>.column.is-narrow{flex:none}.columns.is-mobile>.column.is-full{flex:none;width:100%}.columns.is-mobile>.column.is-three-quarters{flex:none;width:75%}.columns.is-mobile>.column.is-two-thirds{flex:none;width:66.6666%}.columns.is-mobile>.column.is-half{flex:none;width:50%}.columns.is-mobile>.column.is-one-third{flex:none;width:33.3333%}.columns.is-mobile>.column.is-one-quarter{flex:none;width:25%}.columns.is-mobile>.column.is-one-fifth{flex:none;width:20%}.columns.is-mobile>.column.is-two-fifths{flex:none;width:40%}.columns.is-mobile>.column.is-three-fifths{flex:none;width:60%}.columns.is-mobile>.column.is-four-fifths{flex:none;width:80%}.columns.is-mobile>.column.is-offset-three-quarters{margin-left:75%}.columns.is-mobile>.column.is-offset-two-thirds{margin-left:66.6666%}.columns.is-mobile>.column.is-offset-half{margin-left:50%}.columns.is-mobile>.column.is-offset-one-third{margin-left:33.3333%}.columns.is-mobile>.column.is-offset-one-quarter{margin-left:25%}.columns.is-mobile>.column.is-offset-one-fifth{margin-left:20%}.columns.is-mobile>.column.is-offset-two-fifths{margin-left:40%}.columns.is-mobile>.column.is-offset-three-fifths{margin-left:60%}.columns.is-mobile>.column.is-offset-four-fifths{margin-left:80%}.columns.is-mobile>.column.is-0{flex:none;width:0%}.columns.is-mobile>.column.is-offset-0{margin-left:0%}.columns.is-mobile>.column.is-1{flex:none;width:8.3333333333%}.columns.is-mobile>.column.is-offset-1{margin-left:8.3333333333%}.columns.is-mobile>.column.is-2{flex:none;width:16.6666666667%}.columns.is-mobile>.column.is-offset-2{margin-left:16.6666666667%}.columns.is-mobile>.column.is-3{flex:none;width:25%}.columns.is-mobile>.column.is-offset-3{margin-left:25%}.columns.is-mobile>.column.is-4{flex:none;width:33.3333333333%}.columns.is-mobile>.column.is-offset-4{margin-left:33.3333333333%}.columns.is-mobile>.column.is-5{flex:none;width:41.6666666667%}.columns.is-mobile>.column.is-offset-5{margin-left:41.6666666667%}.columns.is-mobile>.column.is-6{flex:none;width:50%}.columns.is-mobile>.column.is-offset-6{margin-left:50%}.columns.is-mobile>.column.is-7{flex:none;width:58.3333333333%}.columns.is-mobile>.column.is-offset-7{margin-left:58.3333333333%}.columns.is-mobile>.column.is-8{flex:none;width:66.6666666667%}.columns.is-mobile>.column.is-offset-8{margin-left:66.6666666667%}.columns.is-mobile>.column.is-9{flex:none;width:75%}.columns.is-mobile>.column.is-offset-9{margin-left:75%}.columns.is-mobile>.column.is-10{flex:none;width:83.3333333333%}.columns.is-mobile>.column.is-offset-10{margin-left:83.3333333333%}.columns.is-mobile>.column.is-11{flex:none;width:91.6666666667%}.columns.is-mobile>.column.is-offset-11{margin-left:91.6666666667%}.columns.is-mobile>.column.is-12{flex:none;width:100%}.columns.is-mobile>.column.is-offset-12{margin-left:100%}@media screen and (max-width: 768px){.column.is-narrow-mobile{flex:none}.column.is-full-mobile{flex:none;width:100%}.column.is-three-quarters-mobile{flex:none;width:75%}.column.is-two-thirds-mobile{flex:none;width:66.6666%}.column.is-half-mobile{flex:none;width:50%}.column.is-one-third-mobile{flex:none;width:33.3333%}.column.is-one-quarter-mobile{flex:none;width:25%}.column.is-one-fifth-mobile{flex:none;width:20%}.column.is-two-fifths-mobile{flex:none;width:40%}.column.is-three-fifths-mobile{flex:none;width:60%}.column.is-four-fifths-mobile{flex:none;width:80%}.column.is-offset-three-quarters-mobile{margin-left:75%}.column.is-offset-two-thirds-mobile{margin-left:66.6666%}.column.is-offset-half-mobile{margin-left:50%}.column.is-offset-one-third-mobile{margin-left:33.3333%}.column.is-offset-one-quarter-mobile{margin-left:25%}.column.is-offset-one-fifth-mobile{margin-left:20%}.column.is-offset-two-fifths-mobile{margin-left:40%}.column.is-offset-three-fifths-mobile{margin-left:60%}.column.is-offset-four-fifths-mobile{margin-left:80%}.column.is-0-mobile{flex:none;width:0%}.column.is-offset-0-mobile{margin-left:0%}.column.is-1-mobile{flex:none;width:8.3333333333%}.column.is-offset-1-mobile{margin-left:8.3333333333%}.column.is-2-mobile{flex:none;width:16.6666666667%}.column.is-offset-2-mobile{margin-left:16.6666666667%}.column.is-3-mobile{flex:none;width:25%}.column.is-offset-3-mobile{margin-left:25%}.column.is-4-mobile{flex:none;width:33.3333333333%}.column.is-offset-4-mobile{margin-left:33.3333333333%}.column.is-5-mobile{flex:none;width:41.6666666667%}.column.is-offset-5-mobile{margin-left:41.6666666667%}.column.is-6-mobile{flex:none;width:50%}.column.is-offset-6-mobile{margin-left:50%}.column.is-7-mobile{flex:none;width:58.3333333333%}.column.is-offset-7-mobile{margin-left:58.3333333333%}.column.is-8-mobile{flex:none;width:66.6666666667%}.column.is-offset-8-mobile{margin-left:66.6666666667%}.column.is-9-mobile{flex:none;width:75%}.column.is-offset-9-mobile{margin-left:75%}.column.is-10-mobile{flex:none;width:83.3333333333%}.column.is-offset-10-mobile{margin-left:83.3333333333%}.column.is-11-mobile{flex:none;width:91.6666666667%}.column.is-offset-11-mobile{margin-left:91.6666666667%}.column.is-12-mobile{flex:none;width:100%}.column.is-offset-12-mobile{margin-left:100%}}@media screen and (min-width: 769px),print{.column.is-narrow,.column.is-narrow-tablet{flex:none}.column.is-full,.column.is-full-tablet{flex:none;width:100%}.column.is-three-quarters,.column.is-three-quarters-tablet{flex:none;width:75%}.column.is-two-thirds,.column.is-two-thirds-tablet{flex:none;width:66.6666%}.column.is-half,.column.is-half-tablet{flex:none;width:50%}.column.is-one-third,.column.is-one-third-tablet{flex:none;width:33.3333%}.column.is-one-quarter,.column.is-one-quarter-tablet{flex:none;width:25%}.column.is-one-fifth,.column.is-one-fifth-tablet{flex:none;width:20%}.column.is-two-fifths,.column.is-two-fifths-tablet{flex:none;width:40%}.column.is-three-fifths,.column.is-three-fifths-tablet{flex:none;width:60%}.column.is-four-fifths,.column.is-four-fifths-tablet{flex:none;width:80%}.column.is-offset-three-quarters,.column.is-offset-three-quarters-tablet{margin-left:75%}.column.is-offset-two-thirds,.column.is-offset-two-thirds-tablet{margin-left:66.6666%}.column.is-offset-half,.column.is-offset-half-tablet{margin-left:50%}.column.is-offset-one-third,.column.is-offset-one-third-tablet{margin-left:33.3333%}.column.is-offset-one-quarter,.column.is-offset-one-quarter-tablet{margin-left:25%}.column.is-offset-one-fifth,.column.is-offset-one-fifth-tablet{margin-left:20%}.column.is-offset-two-fifths,.column.is-offset-two-fifths-tablet{margin-left:40%}.column.is-offset-three-fifths,.column.is-offset-three-fifths-tablet{margin-left:60%}.column.is-offset-four-fifths,.column.is-offset-four-fifths-tablet{margin-left:80%}.column.is-0,.column.is-0-tablet{flex:none;width:0%}.column.is-offset-0,.column.is-offset-0-tablet{margin-left:0%}.column.is-1,.column.is-1-tablet{flex:none;width:8.3333333333%}.column.is-offset-1,.column.is-offset-1-tablet{margin-left:8.3333333333%}.column.is-2,.column.is-2-tablet{flex:none;width:16.6666666667%}.column.is-offset-2,.column.is-offset-2-tablet{margin-left:16.6666666667%}.column.is-3,.column.is-3-tablet{flex:none;width:25%}.column.is-offset-3,.column.is-offset-3-tablet{margin-left:25%}.column.is-4,.column.is-4-tablet{flex:none;width:33.3333333333%}.column.is-offset-4,.column.is-offset-4-tablet{margin-left:33.3333333333%}.column.is-5,.column.is-5-tablet{flex:none;width:41.6666666667%}.column.is-offset-5,.column.is-offset-5-tablet{margin-left:41.6666666667%}.column.is-6,.column.is-6-tablet{flex:none;width:50%}.column.is-offset-6,.column.is-offset-6-tablet{margin-left:50%}.column.is-7,.column.is-7-tablet{flex:none;width:58.3333333333%}.column.is-offset-7,.column.is-offset-7-tablet{margin-left:58.3333333333%}.column.is-8,.column.is-8-tablet{flex:none;width:66.6666666667%}.column.is-offset-8,.column.is-offset-8-tablet{margin-left:66.6666666667%}.column.is-9,.column.is-9-tablet{flex:none;width:75%}.column.is-offset-9,.column.is-offset-9-tablet{margin-left:75%}.column.is-10,.column.is-10-tablet{flex:none;width:83.3333333333%}.column.is-offset-10,.column.is-offset-10-tablet{margin-left:83.3333333333%}.column.is-11,.column.is-11-tablet{flex:none;width:91.6666666667%}.column.is-offset-11,.column.is-offset-11-tablet{margin-left:91.6666666667%}.column.is-12,.column.is-12-tablet{flex:none;width:100%}.column.is-offset-12,.column.is-offset-12-tablet{margin-left:100%}}@media screen and (max-width: 1055px){.column.is-narrow-touch{flex:none}.column.is-full-touch{flex:none;width:100%}.column.is-three-quarters-touch{flex:none;width:75%}.column.is-two-thirds-touch{flex:none;width:66.6666%}.column.is-half-touch{flex:none;width:50%}.column.is-one-third-touch{flex:none;width:33.3333%}.column.is-one-quarter-touch{flex:none;width:25%}.column.is-one-fifth-touch{flex:none;width:20%}.column.is-two-fifths-touch{flex:none;width:40%}.column.is-three-fifths-touch{flex:none;width:60%}.column.is-four-fifths-touch{flex:none;width:80%}.column.is-offset-three-quarters-touch{margin-left:75%}.column.is-offset-two-thirds-touch{margin-left:66.6666%}.column.is-offset-half-touch{margin-left:50%}.column.is-offset-one-third-touch{margin-left:33.3333%}.column.is-offset-one-quarter-touch{margin-left:25%}.column.is-offset-one-fifth-touch{margin-left:20%}.column.is-offset-two-fifths-touch{margin-left:40%}.column.is-offset-three-fifths-touch{margin-left:60%}.column.is-offset-four-fifths-touch{margin-left:80%}.column.is-0-touch{flex:none;width:0%}.column.is-offset-0-touch{margin-left:0%}.column.is-1-touch{flex:none;width:8.3333333333%}.column.is-offset-1-touch{margin-left:8.3333333333%}.column.is-2-touch{flex:none;width:16.6666666667%}.column.is-offset-2-touch{margin-left:16.6666666667%}.column.is-3-touch{flex:none;width:25%}.column.is-offset-3-touch{margin-left:25%}.column.is-4-touch{flex:none;width:33.3333333333%}.column.is-offset-4-touch{margin-left:33.3333333333%}.column.is-5-touch{flex:none;width:41.6666666667%}.column.is-offset-5-touch{margin-left:41.6666666667%}.column.is-6-touch{flex:none;width:50%}.column.is-offset-6-touch{margin-left:50%}.column.is-7-touch{flex:none;width:58.3333333333%}.column.is-offset-7-touch{margin-left:58.3333333333%}.column.is-8-touch{flex:none;width:66.6666666667%}.column.is-offset-8-touch{margin-left:66.6666666667%}.column.is-9-touch{flex:none;width:75%}.column.is-offset-9-touch{margin-left:75%}.column.is-10-touch{flex:none;width:83.3333333333%}.column.is-offset-10-touch{margin-left:83.3333333333%}.column.is-11-touch{flex:none;width:91.6666666667%}.column.is-offset-11-touch{margin-left:91.6666666667%}.column.is-12-touch{flex:none;width:100%}.column.is-offset-12-touch{margin-left:100%}}@media screen and (min-width: 1056px){.column.is-narrow-desktop{flex:none}.column.is-full-desktop{flex:none;width:100%}.column.is-three-quarters-desktop{flex:none;width:75%}.column.is-two-thirds-desktop{flex:none;width:66.6666%}.column.is-half-desktop{flex:none;width:50%}.column.is-one-third-desktop{flex:none;width:33.3333%}.column.is-one-quarter-desktop{flex:none;width:25%}.column.is-one-fifth-desktop{flex:none;width:20%}.column.is-two-fifths-desktop{flex:none;width:40%}.column.is-three-fifths-desktop{flex:none;width:60%}.column.is-four-fifths-desktop{flex:none;width:80%}.column.is-offset-three-quarters-desktop{margin-left:75%}.column.is-offset-two-thirds-desktop{margin-left:66.6666%}.column.is-offset-half-desktop{margin-left:50%}.column.is-offset-one-third-desktop{margin-left:33.3333%}.column.is-offset-one-quarter-desktop{margin-left:25%}.column.is-offset-one-fifth-desktop{margin-left:20%}.column.is-offset-two-fifths-desktop{margin-left:40%}.column.is-offset-three-fifths-desktop{margin-left:60%}.column.is-offset-four-fifths-desktop{margin-left:80%}.column.is-0-desktop{flex:none;width:0%}.column.is-offset-0-desktop{margin-left:0%}.column.is-1-desktop{flex:none;width:8.3333333333%}.column.is-offset-1-desktop{margin-left:8.3333333333%}.column.is-2-desktop{flex:none;width:16.6666666667%}.column.is-offset-2-desktop{margin-left:16.6666666667%}.column.is-3-desktop{flex:none;width:25%}.column.is-offset-3-desktop{margin-left:25%}.column.is-4-desktop{flex:none;width:33.3333333333%}.column.is-offset-4-desktop{margin-left:33.3333333333%}.column.is-5-desktop{flex:none;width:41.6666666667%}.column.is-offset-5-desktop{margin-left:41.6666666667%}.column.is-6-desktop{flex:none;width:50%}.column.is-offset-6-desktop{margin-left:50%}.column.is-7-desktop{flex:none;width:58.3333333333%}.column.is-offset-7-desktop{margin-left:58.3333333333%}.column.is-8-desktop{flex:none;width:66.6666666667%}.column.is-offset-8-desktop{margin-left:66.6666666667%}.column.is-9-desktop{flex:none;width:75%}.column.is-offset-9-desktop{margin-left:75%}.column.is-10-desktop{flex:none;width:83.3333333333%}.column.is-offset-10-desktop{margin-left:83.3333333333%}.column.is-11-desktop{flex:none;width:91.6666666667%}.column.is-offset-11-desktop{margin-left:91.6666666667%}.column.is-12-desktop{flex:none;width:100%}.column.is-offset-12-desktop{margin-left:100%}}@media screen and (min-width: 1216px){.column.is-narrow-widescreen{flex:none}.column.is-full-widescreen{flex:none;width:100%}.column.is-three-quarters-widescreen{flex:none;width:75%}.column.is-two-thirds-widescreen{flex:none;width:66.6666%}.column.is-half-widescreen{flex:none;width:50%}.column.is-one-third-widescreen{flex:none;width:33.3333%}.column.is-one-quarter-widescreen{flex:none;width:25%}.column.is-one-fifth-widescreen{flex:none;width:20%}.column.is-two-fifths-widescreen{flex:none;width:40%}.column.is-three-fifths-widescreen{flex:none;width:60%}.column.is-four-fifths-widescreen{flex:none;width:80%}.column.is-offset-three-quarters-widescreen{margin-left:75%}.column.is-offset-two-thirds-widescreen{margin-left:66.6666%}.column.is-offset-half-widescreen{margin-left:50%}.column.is-offset-one-third-widescreen{margin-left:33.3333%}.column.is-offset-one-quarter-widescreen{margin-left:25%}.column.is-offset-one-fifth-widescreen{margin-left:20%}.column.is-offset-two-fifths-widescreen{margin-left:40%}.column.is-offset-three-fifths-widescreen{margin-left:60%}.column.is-offset-four-fifths-widescreen{margin-left:80%}.column.is-0-widescreen{flex:none;width:0%}.column.is-offset-0-widescreen{margin-left:0%}.column.is-1-widescreen{flex:none;width:8.3333333333%}.column.is-offset-1-widescreen{margin-left:8.3333333333%}.column.is-2-widescreen{flex:none;width:16.6666666667%}.column.is-offset-2-widescreen{margin-left:16.6666666667%}.column.is-3-widescreen{flex:none;width:25%}.column.is-offset-3-widescreen{margin-left:25%}.column.is-4-widescreen{flex:none;width:33.3333333333%}.column.is-offset-4-widescreen{margin-left:33.3333333333%}.column.is-5-widescreen{flex:none;width:41.6666666667%}.column.is-offset-5-widescreen{margin-left:41.6666666667%}.column.is-6-widescreen{flex:none;width:50%}.column.is-offset-6-widescreen{margin-left:50%}.column.is-7-widescreen{flex:none;width:58.3333333333%}.column.is-offset-7-widescreen{margin-left:58.3333333333%}.column.is-8-widescreen{flex:none;width:66.6666666667%}.column.is-offset-8-widescreen{margin-left:66.6666666667%}.column.is-9-widescreen{flex:none;width:75%}.column.is-offset-9-widescreen{margin-left:75%}.column.is-10-widescreen{flex:none;width:83.3333333333%}.column.is-offset-10-widescreen{margin-left:83.3333333333%}.column.is-11-widescreen{flex:none;width:91.6666666667%}.column.is-offset-11-widescreen{margin-left:91.6666666667%}.column.is-12-widescreen{flex:none;width:100%}.column.is-offset-12-widescreen{margin-left:100%}}@media screen and (min-width: 1408px){.column.is-narrow-fullhd{flex:none}.column.is-full-fullhd{flex:none;width:100%}.column.is-three-quarters-fullhd{flex:none;width:75%}.column.is-two-thirds-fullhd{flex:none;width:66.6666%}.column.is-half-fullhd{flex:none;width:50%}.column.is-one-third-fullhd{flex:none;width:33.3333%}.column.is-one-quarter-fullhd{flex:none;width:25%}.column.is-one-fifth-fullhd{flex:none;width:20%}.column.is-two-fifths-fullhd{flex:none;width:40%}.column.is-three-fifths-fullhd{flex:none;width:60%}.column.is-four-fifths-fullhd{flex:none;width:80%}.column.is-offset-three-quarters-fullhd{margin-left:75%}.column.is-offset-two-thirds-fullhd{margin-left:66.6666%}.column.is-offset-half-fullhd{margin-left:50%}.column.is-offset-one-third-fullhd{margin-left:33.3333%}.column.is-offset-one-quarter-fullhd{margin-left:25%}.column.is-offset-one-fifth-fullhd{margin-left:20%}.column.is-offset-two-fifths-fullhd{margin-left:40%}.column.is-offset-three-fifths-fullhd{margin-left:60%}.column.is-offset-four-fifths-fullhd{margin-left:80%}.column.is-0-fullhd{flex:none;width:0%}.column.is-offset-0-fullhd{margin-left:0%}.column.is-1-fullhd{flex:none;width:8.3333333333%}.column.is-offset-1-fullhd{margin-left:8.3333333333%}.column.is-2-fullhd{flex:none;width:16.6666666667%}.column.is-offset-2-fullhd{margin-left:16.6666666667%}.column.is-3-fullhd{flex:none;width:25%}.column.is-offset-3-fullhd{margin-left:25%}.column.is-4-fullhd{flex:none;width:33.3333333333%}.column.is-offset-4-fullhd{margin-left:33.3333333333%}.column.is-5-fullhd{flex:none;width:41.6666666667%}.column.is-offset-5-fullhd{margin-left:41.6666666667%}.column.is-6-fullhd{flex:none;width:50%}.column.is-offset-6-fullhd{margin-left:50%}.column.is-7-fullhd{flex:none;width:58.3333333333%}.column.is-offset-7-fullhd{margin-left:58.3333333333%}.column.is-8-fullhd{flex:none;width:66.6666666667%}.column.is-offset-8-fullhd{margin-left:66.6666666667%}.column.is-9-fullhd{flex:none;width:75%}.column.is-offset-9-fullhd{margin-left:75%}.column.is-10-fullhd{flex:none;width:83.3333333333%}.column.is-offset-10-fullhd{margin-left:83.3333333333%}.column.is-11-fullhd{flex:none;width:91.6666666667%}.column.is-offset-11-fullhd{margin-left:91.6666666667%}.column.is-12-fullhd{flex:none;width:100%}.column.is-offset-12-fullhd{margin-left:100%}}.columns{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.columns:last-child{margin-bottom:-.75rem}.columns:not(:last-child){margin-bottom:calc(1.5rem - .75rem)}.columns.is-centered{justify-content:center}.columns.is-gapless{margin-left:0;margin-right:0;margin-top:0}.columns.is-gapless>.column{margin:0;padding:0 !important}.columns.is-gapless:not(:last-child){margin-bottom:1.5rem}.columns.is-gapless:last-child{margin-bottom:0}.columns.is-mobile{display:flex}.columns.is-multiline{flex-wrap:wrap}.columns.is-vcentered{align-items:center}@media screen and (min-width: 769px),print{.columns:not(.is-desktop){display:flex}}@media screen and (min-width: 1056px){.columns.is-desktop{display:flex}}.columns.is-variable{--columnGap: 0.75rem;margin-left:calc(-1 * var(--columnGap));margin-right:calc(-1 * var(--columnGap))}.columns.is-variable .column{padding-left:var(--columnGap);padding-right:var(--columnGap)}.columns.is-variable.is-0{--columnGap: 0rem}@media screen and (max-width: 768px){.columns.is-variable.is-0-mobile{--columnGap: 0rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-0-tablet{--columnGap: 0rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-0-tablet-only{--columnGap: 0rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-0-touch{--columnGap: 0rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-0-desktop{--columnGap: 0rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-0-desktop-only{--columnGap: 0rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-0-widescreen{--columnGap: 0rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-0-widescreen-only{--columnGap: 0rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-0-fullhd{--columnGap: 0rem}}.columns.is-variable.is-1{--columnGap: .25rem}@media screen and (max-width: 768px){.columns.is-variable.is-1-mobile{--columnGap: .25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-1-tablet{--columnGap: .25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-1-tablet-only{--columnGap: .25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-1-touch{--columnGap: .25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-1-desktop{--columnGap: .25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-1-desktop-only{--columnGap: .25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-1-widescreen{--columnGap: .25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-1-widescreen-only{--columnGap: .25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-1-fullhd{--columnGap: .25rem}}.columns.is-variable.is-2{--columnGap: .5rem}@media screen and (max-width: 768px){.columns.is-variable.is-2-mobile{--columnGap: .5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-2-tablet{--columnGap: .5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-2-tablet-only{--columnGap: .5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-2-touch{--columnGap: .5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-2-desktop{--columnGap: .5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-2-desktop-only{--columnGap: .5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-2-widescreen{--columnGap: .5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-2-widescreen-only{--columnGap: .5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-2-fullhd{--columnGap: .5rem}}.columns.is-variable.is-3{--columnGap: .75rem}@media screen and (max-width: 768px){.columns.is-variable.is-3-mobile{--columnGap: .75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-3-tablet{--columnGap: .75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-3-tablet-only{--columnGap: .75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-3-touch{--columnGap: .75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-3-desktop{--columnGap: .75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-3-desktop-only{--columnGap: .75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-3-widescreen{--columnGap: .75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-3-widescreen-only{--columnGap: .75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-3-fullhd{--columnGap: .75rem}}.columns.is-variable.is-4{--columnGap: 1rem}@media screen and (max-width: 768px){.columns.is-variable.is-4-mobile{--columnGap: 1rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-4-tablet{--columnGap: 1rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-4-tablet-only{--columnGap: 1rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-4-touch{--columnGap: 1rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-4-desktop{--columnGap: 1rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-4-desktop-only{--columnGap: 1rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-4-widescreen{--columnGap: 1rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-4-widescreen-only{--columnGap: 1rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-4-fullhd{--columnGap: 1rem}}.columns.is-variable.is-5{--columnGap: 1.25rem}@media screen and (max-width: 768px){.columns.is-variable.is-5-mobile{--columnGap: 1.25rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-5-tablet{--columnGap: 1.25rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-5-tablet-only{--columnGap: 1.25rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-5-touch{--columnGap: 1.25rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-5-desktop{--columnGap: 1.25rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-5-desktop-only{--columnGap: 1.25rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-5-widescreen{--columnGap: 1.25rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-5-widescreen-only{--columnGap: 1.25rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-5-fullhd{--columnGap: 1.25rem}}.columns.is-variable.is-6{--columnGap: 1.5rem}@media screen and (max-width: 768px){.columns.is-variable.is-6-mobile{--columnGap: 1.5rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-6-tablet{--columnGap: 1.5rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-6-tablet-only{--columnGap: 1.5rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-6-touch{--columnGap: 1.5rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-6-desktop{--columnGap: 1.5rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-6-desktop-only{--columnGap: 1.5rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-6-widescreen{--columnGap: 1.5rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-6-widescreen-only{--columnGap: 1.5rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-6-fullhd{--columnGap: 1.5rem}}.columns.is-variable.is-7{--columnGap: 1.75rem}@media screen and (max-width: 768px){.columns.is-variable.is-7-mobile{--columnGap: 1.75rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-7-tablet{--columnGap: 1.75rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-7-tablet-only{--columnGap: 1.75rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-7-touch{--columnGap: 1.75rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-7-desktop{--columnGap: 1.75rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-7-desktop-only{--columnGap: 1.75rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-7-widescreen{--columnGap: 1.75rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-7-widescreen-only{--columnGap: 1.75rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-7-fullhd{--columnGap: 1.75rem}}.columns.is-variable.is-8{--columnGap: 2rem}@media screen and (max-width: 768px){.columns.is-variable.is-8-mobile{--columnGap: 2rem}}@media screen and (min-width: 769px),print{.columns.is-variable.is-8-tablet{--columnGap: 2rem}}@media screen and (min-width: 769px) and (max-width: 1055px){.columns.is-variable.is-8-tablet-only{--columnGap: 2rem}}@media screen and (max-width: 1055px){.columns.is-variable.is-8-touch{--columnGap: 2rem}}@media screen and (min-width: 1056px){.columns.is-variable.is-8-desktop{--columnGap: 2rem}}@media screen and (min-width: 1056px) and (max-width: 1215px){.columns.is-variable.is-8-desktop-only{--columnGap: 2rem}}@media screen and (min-width: 1216px){.columns.is-variable.is-8-widescreen{--columnGap: 2rem}}@media screen and (min-width: 1216px) and (max-width: 1407px){.columns.is-variable.is-8-widescreen-only{--columnGap: 2rem}}@media screen and (min-width: 1408px){.columns.is-variable.is-8-fullhd{--columnGap: 2rem}}.tile{align-items:stretch;display:block;flex-basis:0;flex-grow:1;flex-shrink:1;min-height:min-content}.tile.is-ancestor{margin-left:-.75rem;margin-right:-.75rem;margin-top:-.75rem}.tile.is-ancestor:last-child{margin-bottom:-.75rem}.tile.is-ancestor:not(:last-child){margin-bottom:.75rem}.tile.is-child{margin:0 !important}.tile.is-parent{padding:.75rem}.tile.is-vertical{flex-direction:column}.tile.is-vertical>.tile.is-child:not(:last-child){margin-bottom:1.5rem !important}@media screen and (min-width: 769px),print{.tile:not(.is-child){display:flex}.tile.is-1{flex:none;width:8.3333333333%}.tile.is-2{flex:none;width:16.6666666667%}.tile.is-3{flex:none;width:25%}.tile.is-4{flex:none;width:33.3333333333%}.tile.is-5{flex:none;width:41.6666666667%}.tile.is-6{flex:none;width:50%}.tile.is-7{flex:none;width:58.3333333333%}.tile.is-8{flex:none;width:66.6666666667%}.tile.is-9{flex:none;width:75%}.tile.is-10{flex:none;width:83.3333333333%}.tile.is-11{flex:none;width:91.6666666667%}.tile.is-12{flex:none;width:100%}}.hero{align-items:stretch;display:flex;flex-direction:column;justify-content:space-between}.hero .navbar{background:none}.hero .tabs ul{border-bottom:none}.hero.is-white{background-color:#fff;color:#0a0a0a}.hero.is-white a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-white strong{color:inherit}.hero.is-white .title{color:#0a0a0a}.hero.is-white .subtitle{color:rgba(10,10,10,0.9)}.hero.is-white .subtitle a:not(.button),.hero.is-white .subtitle strong{color:#0a0a0a}@media screen and (max-width: 1055px){.hero.is-white .navbar-menu{background-color:#fff}}.hero.is-white .navbar-item,.hero.is-white .navbar-link{color:rgba(10,10,10,0.7)}.hero.is-white a.navbar-item:hover,.hero.is-white a.navbar-item.is-active,.hero.is-white .navbar-link:hover,.hero.is-white .navbar-link.is-active{background-color:#f2f2f2;color:#0a0a0a}.hero.is-white .tabs a{color:#0a0a0a;opacity:0.9}.hero.is-white .tabs a:hover{opacity:1}.hero.is-white .tabs li.is-active a{opacity:1}.hero.is-white .tabs.is-boxed a,.hero.is-white .tabs.is-toggle a{color:#0a0a0a}.hero.is-white .tabs.is-boxed a:hover,.hero.is-white .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-white .tabs.is-boxed li.is-active a,.hero.is-white .tabs.is-boxed li.is-active a:hover,.hero.is-white .tabs.is-toggle li.is-active a,.hero.is-white .tabs.is-toggle li.is-active a:hover{background-color:#0a0a0a;border-color:#0a0a0a;color:#fff}.hero.is-white.is-bold{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-white.is-bold .navbar-menu{background-image:linear-gradient(141deg, #e8e3e4 0%, #fff 71%, #fff 100%)}}.hero.is-black{background-color:#0a0a0a;color:#fff}.hero.is-black a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-black strong{color:inherit}.hero.is-black .title{color:#fff}.hero.is-black .subtitle{color:rgba(255,255,255,0.9)}.hero.is-black .subtitle a:not(.button),.hero.is-black .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-black .navbar-menu{background-color:#0a0a0a}}.hero.is-black .navbar-item,.hero.is-black .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-black a.navbar-item:hover,.hero.is-black a.navbar-item.is-active,.hero.is-black .navbar-link:hover,.hero.is-black .navbar-link.is-active{background-color:#000;color:#fff}.hero.is-black .tabs a{color:#fff;opacity:0.9}.hero.is-black .tabs a:hover{opacity:1}.hero.is-black .tabs li.is-active a{opacity:1}.hero.is-black .tabs.is-boxed a,.hero.is-black .tabs.is-toggle a{color:#fff}.hero.is-black .tabs.is-boxed a:hover,.hero.is-black .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-black .tabs.is-boxed li.is-active a,.hero.is-black .tabs.is-boxed li.is-active a:hover,.hero.is-black .tabs.is-toggle li.is-active a,.hero.is-black .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#0a0a0a}.hero.is-black.is-bold{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}@media screen and (max-width: 768px){.hero.is-black.is-bold .navbar-menu{background-image:linear-gradient(141deg, #000 0%, #0a0a0a 71%, #181616 100%)}}.hero.is-light{background-color:#f5f5f5;color:#363636}.hero.is-light a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-light strong{color:inherit}.hero.is-light .title{color:#363636}.hero.is-light .subtitle{color:rgba(54,54,54,0.9)}.hero.is-light .subtitle a:not(.button),.hero.is-light .subtitle strong{color:#363636}@media screen and (max-width: 1055px){.hero.is-light .navbar-menu{background-color:#f5f5f5}}.hero.is-light .navbar-item,.hero.is-light .navbar-link{color:rgba(54,54,54,0.7)}.hero.is-light a.navbar-item:hover,.hero.is-light a.navbar-item.is-active,.hero.is-light .navbar-link:hover,.hero.is-light .navbar-link.is-active{background-color:#e8e8e8;color:#363636}.hero.is-light .tabs a{color:#363636;opacity:0.9}.hero.is-light .tabs a:hover{opacity:1}.hero.is-light .tabs li.is-active a{opacity:1}.hero.is-light .tabs.is-boxed a,.hero.is-light .tabs.is-toggle a{color:#363636}.hero.is-light .tabs.is-boxed a:hover,.hero.is-light .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-light .tabs.is-boxed li.is-active a,.hero.is-light .tabs.is-boxed li.is-active a:hover,.hero.is-light .tabs.is-toggle li.is-active a,.hero.is-light .tabs.is-toggle li.is-active a:hover{background-color:#363636;border-color:#363636;color:#f5f5f5}.hero.is-light.is-bold{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}@media screen and (max-width: 768px){.hero.is-light.is-bold .navbar-menu{background-image:linear-gradient(141deg, #dfd8d9 0%, #f5f5f5 71%, #fff 100%)}}.hero.is-dark,.content kbd.hero{background-color:#363636;color:#f5f5f5}.hero.is-dark a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.content kbd.hero a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-dark strong,.content kbd.hero strong{color:inherit}.hero.is-dark .title,.content kbd.hero .title{color:#f5f5f5}.hero.is-dark .subtitle,.content kbd.hero .subtitle{color:rgba(245,245,245,0.9)}.hero.is-dark .subtitle a:not(.button),.content kbd.hero .subtitle a:not(.button),.hero.is-dark .subtitle strong,.content kbd.hero .subtitle strong{color:#f5f5f5}@media screen and (max-width: 1055px){.hero.is-dark .navbar-menu,.content kbd.hero .navbar-menu{background-color:#363636}}.hero.is-dark .navbar-item,.content kbd.hero .navbar-item,.hero.is-dark .navbar-link,.content kbd.hero .navbar-link{color:rgba(245,245,245,0.7)}.hero.is-dark a.navbar-item:hover,.content kbd.hero a.navbar-item:hover,.hero.is-dark a.navbar-item.is-active,.content kbd.hero a.navbar-item.is-active,.hero.is-dark .navbar-link:hover,.content kbd.hero .navbar-link:hover,.hero.is-dark .navbar-link.is-active,.content kbd.hero .navbar-link.is-active{background-color:#292929;color:#f5f5f5}.hero.is-dark .tabs a,.content kbd.hero .tabs a{color:#f5f5f5;opacity:0.9}.hero.is-dark .tabs a:hover,.content kbd.hero .tabs a:hover{opacity:1}.hero.is-dark .tabs li.is-active a,.content kbd.hero .tabs li.is-active a{opacity:1}.hero.is-dark .tabs.is-boxed a,.content kbd.hero .tabs.is-boxed a,.hero.is-dark .tabs.is-toggle a,.content kbd.hero .tabs.is-toggle a{color:#f5f5f5}.hero.is-dark .tabs.is-boxed a:hover,.content kbd.hero .tabs.is-boxed a:hover,.hero.is-dark .tabs.is-toggle a:hover,.content kbd.hero .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-dark .tabs.is-boxed li.is-active a,.content kbd.hero .tabs.is-boxed li.is-active a,.hero.is-dark .tabs.is-boxed li.is-active a:hover,.hero.is-dark .tabs.is-toggle li.is-active a,.content kbd.hero .tabs.is-toggle li.is-active a,.hero.is-dark .tabs.is-toggle li.is-active a:hover{background-color:#f5f5f5;border-color:#f5f5f5;color:#363636}.hero.is-dark.is-bold,.content kbd.hero.is-bold{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}@media screen and (max-width: 768px){.hero.is-dark.is-bold .navbar-menu,.content kbd.hero.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1f191a 0%, #363636 71%, #46403f 100%)}}.hero.is-primary,.docstring>section>a.hero.docs-sourcelink{background-color:#4eb5de;color:#fff}.hero.is-primary a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.docstring>section>a.hero.docs-sourcelink a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-primary strong,.docstring>section>a.hero.docs-sourcelink strong{color:inherit}.hero.is-primary .title,.docstring>section>a.hero.docs-sourcelink .title{color:#fff}.hero.is-primary .subtitle,.docstring>section>a.hero.docs-sourcelink .subtitle{color:rgba(255,255,255,0.9)}.hero.is-primary .subtitle a:not(.button),.docstring>section>a.hero.docs-sourcelink .subtitle a:not(.button),.hero.is-primary .subtitle strong,.docstring>section>a.hero.docs-sourcelink .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-primary .navbar-menu,.docstring>section>a.hero.docs-sourcelink .navbar-menu{background-color:#4eb5de}}.hero.is-primary .navbar-item,.docstring>section>a.hero.docs-sourcelink .navbar-item,.hero.is-primary .navbar-link,.docstring>section>a.hero.docs-sourcelink .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-primary a.navbar-item:hover,.docstring>section>a.hero.docs-sourcelink a.navbar-item:hover,.hero.is-primary a.navbar-item.is-active,.docstring>section>a.hero.docs-sourcelink a.navbar-item.is-active,.hero.is-primary .navbar-link:hover,.docstring>section>a.hero.docs-sourcelink .navbar-link:hover,.hero.is-primary .navbar-link.is-active,.docstring>section>a.hero.docs-sourcelink .navbar-link.is-active{background-color:#39acda;color:#fff}.hero.is-primary .tabs a,.docstring>section>a.hero.docs-sourcelink .tabs a{color:#fff;opacity:0.9}.hero.is-primary .tabs a:hover,.docstring>section>a.hero.docs-sourcelink .tabs a:hover{opacity:1}.hero.is-primary .tabs li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs li.is-active a{opacity:1}.hero.is-primary .tabs.is-boxed a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a,.hero.is-primary .tabs.is-toggle a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a{color:#fff}.hero.is-primary .tabs.is-boxed a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed a:hover,.hero.is-primary .tabs.is-toggle a:hover,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-primary .tabs.is-boxed li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-boxed li.is-active a,.hero.is-primary .tabs.is-boxed li.is-active a:hover,.hero.is-primary .tabs.is-toggle li.is-active a,.docstring>section>a.hero.docs-sourcelink .tabs.is-toggle li.is-active a,.hero.is-primary .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#4eb5de}.hero.is-primary.is-bold,.docstring>section>a.hero.is-bold.docs-sourcelink{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}@media screen and (max-width: 768px){.hero.is-primary.is-bold .navbar-menu,.docstring>section>a.hero.is-bold.docs-sourcelink .navbar-menu{background-image:linear-gradient(141deg, #1bc7de 0%, #4eb5de 71%, #5fa9e7 100%)}}.hero.is-link{background-color:#2e63b8;color:#fff}.hero.is-link a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-link strong{color:inherit}.hero.is-link .title{color:#fff}.hero.is-link .subtitle{color:rgba(255,255,255,0.9)}.hero.is-link .subtitle a:not(.button),.hero.is-link .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-link .navbar-menu{background-color:#2e63b8}}.hero.is-link .navbar-item,.hero.is-link .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-link a.navbar-item:hover,.hero.is-link a.navbar-item.is-active,.hero.is-link .navbar-link:hover,.hero.is-link .navbar-link.is-active{background-color:#2958a4;color:#fff}.hero.is-link .tabs a{color:#fff;opacity:0.9}.hero.is-link .tabs a:hover{opacity:1}.hero.is-link .tabs li.is-active a{opacity:1}.hero.is-link .tabs.is-boxed a,.hero.is-link .tabs.is-toggle a{color:#fff}.hero.is-link .tabs.is-boxed a:hover,.hero.is-link .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-link .tabs.is-boxed li.is-active a,.hero.is-link .tabs.is-boxed li.is-active a:hover,.hero.is-link .tabs.is-toggle li.is-active a,.hero.is-link .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#2e63b8}.hero.is-link.is-bold{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}@media screen and (max-width: 768px){.hero.is-link.is-bold .navbar-menu{background-image:linear-gradient(141deg, #1b6098 0%, #2e63b8 71%, #2d51d2 100%)}}.hero.is-info{background-color:#209cee;color:#fff}.hero.is-info a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-info strong{color:inherit}.hero.is-info .title{color:#fff}.hero.is-info .subtitle{color:rgba(255,255,255,0.9)}.hero.is-info .subtitle a:not(.button),.hero.is-info .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-info .navbar-menu{background-color:#209cee}}.hero.is-info .navbar-item,.hero.is-info .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-info a.navbar-item:hover,.hero.is-info a.navbar-item.is-active,.hero.is-info .navbar-link:hover,.hero.is-info .navbar-link.is-active{background-color:#1190e3;color:#fff}.hero.is-info .tabs a{color:#fff;opacity:0.9}.hero.is-info .tabs a:hover{opacity:1}.hero.is-info .tabs li.is-active a{opacity:1}.hero.is-info .tabs.is-boxed a,.hero.is-info .tabs.is-toggle a{color:#fff}.hero.is-info .tabs.is-boxed a:hover,.hero.is-info .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-info .tabs.is-boxed li.is-active a,.hero.is-info .tabs.is-boxed li.is-active a:hover,.hero.is-info .tabs.is-toggle li.is-active a,.hero.is-info .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#209cee}.hero.is-info.is-bold{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}@media screen and (max-width: 768px){.hero.is-info.is-bold .navbar-menu{background-image:linear-gradient(141deg, #05a6d6 0%, #209cee 71%, #3287f5 100%)}}.hero.is-success{background-color:#22c35b;color:#fff}.hero.is-success a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-success strong{color:inherit}.hero.is-success .title{color:#fff}.hero.is-success .subtitle{color:rgba(255,255,255,0.9)}.hero.is-success .subtitle a:not(.button),.hero.is-success .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-success .navbar-menu{background-color:#22c35b}}.hero.is-success .navbar-item,.hero.is-success .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-success a.navbar-item:hover,.hero.is-success a.navbar-item.is-active,.hero.is-success .navbar-link:hover,.hero.is-success .navbar-link.is-active{background-color:#1ead51;color:#fff}.hero.is-success .tabs a{color:#fff;opacity:0.9}.hero.is-success .tabs a:hover{opacity:1}.hero.is-success .tabs li.is-active a{opacity:1}.hero.is-success .tabs.is-boxed a,.hero.is-success .tabs.is-toggle a{color:#fff}.hero.is-success .tabs.is-boxed a:hover,.hero.is-success .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-success .tabs.is-boxed li.is-active a,.hero.is-success .tabs.is-boxed li.is-active a:hover,.hero.is-success .tabs.is-toggle li.is-active a,.hero.is-success .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#22c35b}.hero.is-success.is-bold{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}@media screen and (max-width: 768px){.hero.is-success.is-bold .navbar-menu{background-image:linear-gradient(141deg, #12a02c 0%, #22c35b 71%, #1fdf83 100%)}}.hero.is-warning{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.hero.is-warning a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-warning strong{color:inherit}.hero.is-warning .title{color:rgba(0,0,0,0.7)}.hero.is-warning .subtitle{color:rgba(0,0,0,0.9)}.hero.is-warning .subtitle a:not(.button),.hero.is-warning .subtitle strong{color:rgba(0,0,0,0.7)}@media screen and (max-width: 1055px){.hero.is-warning .navbar-menu{background-color:#ffdd57}}.hero.is-warning .navbar-item,.hero.is-warning .navbar-link{color:rgba(0,0,0,0.7)}.hero.is-warning a.navbar-item:hover,.hero.is-warning a.navbar-item.is-active,.hero.is-warning .navbar-link:hover,.hero.is-warning .navbar-link.is-active{background-color:#ffd83e;color:rgba(0,0,0,0.7)}.hero.is-warning .tabs a{color:rgba(0,0,0,0.7);opacity:0.9}.hero.is-warning .tabs a:hover{opacity:1}.hero.is-warning .tabs li.is-active a{opacity:1}.hero.is-warning .tabs.is-boxed a,.hero.is-warning .tabs.is-toggle a{color:rgba(0,0,0,0.7)}.hero.is-warning .tabs.is-boxed a:hover,.hero.is-warning .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-warning .tabs.is-boxed li.is-active a,.hero.is-warning .tabs.is-boxed li.is-active a:hover,.hero.is-warning .tabs.is-toggle li.is-active a,.hero.is-warning .tabs.is-toggle li.is-active a:hover{background-color:rgba(0,0,0,0.7);border-color:rgba(0,0,0,0.7);color:#ffdd57}.hero.is-warning.is-bold{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}@media screen and (max-width: 768px){.hero.is-warning.is-bold .navbar-menu{background-image:linear-gradient(141deg, #ffae24 0%, #ffdd57 71%, #fffa71 100%)}}.hero.is-danger{background-color:#da0b00;color:#fff}.hero.is-danger a:not(.button):not(.dropdown-item):not(.tag):not(.pagination-link.is-current),.hero.is-danger strong{color:inherit}.hero.is-danger .title{color:#fff}.hero.is-danger .subtitle{color:rgba(255,255,255,0.9)}.hero.is-danger .subtitle a:not(.button),.hero.is-danger .subtitle strong{color:#fff}@media screen and (max-width: 1055px){.hero.is-danger .navbar-menu{background-color:#da0b00}}.hero.is-danger .navbar-item,.hero.is-danger .navbar-link{color:rgba(255,255,255,0.7)}.hero.is-danger a.navbar-item:hover,.hero.is-danger a.navbar-item.is-active,.hero.is-danger .navbar-link:hover,.hero.is-danger .navbar-link.is-active{background-color:#c10a00;color:#fff}.hero.is-danger .tabs a{color:#fff;opacity:0.9}.hero.is-danger .tabs a:hover{opacity:1}.hero.is-danger .tabs li.is-active a{opacity:1}.hero.is-danger .tabs.is-boxed a,.hero.is-danger .tabs.is-toggle a{color:#fff}.hero.is-danger .tabs.is-boxed a:hover,.hero.is-danger .tabs.is-toggle a:hover{background-color:rgba(10,10,10,0.1)}.hero.is-danger .tabs.is-boxed li.is-active a,.hero.is-danger .tabs.is-boxed li.is-active a:hover,.hero.is-danger .tabs.is-toggle li.is-active a,.hero.is-danger .tabs.is-toggle li.is-active a:hover{background-color:#fff;border-color:#fff;color:#da0b00}.hero.is-danger.is-bold{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}@media screen and (max-width: 768px){.hero.is-danger.is-bold .navbar-menu{background-image:linear-gradient(141deg, #a70013 0%, #da0b00 71%, #f43500 100%)}}.hero.is-small .hero-body,#documenter .docs-sidebar form.docs-search>input.hero .hero-body{padding-bottom:1.5rem;padding-top:1.5rem}@media screen and (min-width: 769px),print{.hero.is-medium .hero-body{padding-bottom:9rem;padding-top:9rem}}@media screen and (min-width: 769px),print{.hero.is-large .hero-body{padding-bottom:18rem;padding-top:18rem}}.hero.is-halfheight .hero-body,.hero.is-fullheight .hero-body,.hero.is-fullheight-with-navbar .hero-body{align-items:center;display:flex}.hero.is-halfheight .hero-body>.container,.hero.is-fullheight .hero-body>.container,.hero.is-fullheight-with-navbar .hero-body>.container{flex-grow:1;flex-shrink:1}.hero.is-halfheight{min-height:50vh}.hero.is-fullheight{min-height:100vh}.hero-video{overflow:hidden}.hero-video video{left:50%;min-height:100%;min-width:100%;position:absolute;top:50%;transform:translate3d(-50%, -50%, 0)}.hero-video.is-transparent{opacity:0.3}@media screen and (max-width: 768px){.hero-video{display:none}}.hero-buttons{margin-top:1.5rem}@media screen and (max-width: 768px){.hero-buttons .button{display:flex}.hero-buttons .button:not(:last-child){margin-bottom:0.75rem}}@media screen and (min-width: 769px),print{.hero-buttons{display:flex;justify-content:center}.hero-buttons .button:not(:last-child){margin-right:1.5rem}}.hero-head,.hero-foot{flex-grow:0;flex-shrink:0}.hero-body{flex-grow:1;flex-shrink:0;padding:3rem 1.5rem}.section{padding:3rem 1.5rem}@media screen and (min-width: 1056px){.section.is-medium{padding:9rem 1.5rem}.section.is-large{padding:18rem 1.5rem}}.footer{background-color:#fafafa;padding:3rem 1.5rem 6rem}h1 .docs-heading-anchor,h1 .docs-heading-anchor:hover,h1 .docs-heading-anchor:visited,h2 .docs-heading-anchor,h2 .docs-heading-anchor:hover,h2 .docs-heading-anchor:visited,h3 .docs-heading-anchor,h3 .docs-heading-anchor:hover,h3 .docs-heading-anchor:visited,h4 .docs-heading-anchor,h4 .docs-heading-anchor:hover,h4 .docs-heading-anchor:visited,h5 .docs-heading-anchor,h5 .docs-heading-anchor:hover,h5 .docs-heading-anchor:visited,h6 .docs-heading-anchor,h6 .docs-heading-anchor:hover,h6 .docs-heading-anchor:visited{color:#222}h1 .docs-heading-anchor-permalink,h2 .docs-heading-anchor-permalink,h3 .docs-heading-anchor-permalink,h4 .docs-heading-anchor-permalink,h5 .docs-heading-anchor-permalink,h6 .docs-heading-anchor-permalink{visibility:hidden;vertical-align:middle;margin-left:0.5em;font-size:0.7rem}h1 .docs-heading-anchor-permalink::before,h2 .docs-heading-anchor-permalink::before,h3 .docs-heading-anchor-permalink::before,h4 .docs-heading-anchor-permalink::before,h5 .docs-heading-anchor-permalink::before,h6 .docs-heading-anchor-permalink::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f0c1"}h1:hover .docs-heading-anchor-permalink,h2:hover .docs-heading-anchor-permalink,h3:hover .docs-heading-anchor-permalink,h4:hover .docs-heading-anchor-permalink,h5:hover .docs-heading-anchor-permalink,h6:hover .docs-heading-anchor-permalink{visibility:visible}.docs-dark-only{display:none !important}pre{position:relative;overflow:hidden}pre code,pre code.hljs{padding:0 .75rem !important;overflow:auto;display:block}pre code:first-of-type,pre code.hljs:first-of-type{padding-top:0.5rem !important}pre code:last-of-type,pre code.hljs:last-of-type{padding-bottom:0.5rem !important}pre .copy-button{opacity:0.2;transition:opacity 0.2s;position:absolute;right:0em;top:0em;padding:0.5em;width:2.5em;height:2.5em;background:transparent;border:none;font-family:"Font Awesome 5 Free";color:#222;cursor:pointer;text-align:center}pre .copy-button:focus,pre .copy-button:hover{opacity:1;background:rgba(34,34,34,0.1);color:#2e63b8}pre .copy-button.success{color:#259a12;opacity:1}pre .copy-button.error{color:#cb3c33;opacity:1}pre:hover .copy-button{opacity:1}.admonition{background-color:#b5b5b5;border-style:solid;border-width:1px;border-color:#363636;border-radius:4px;font-size:1rem}.admonition strong{color:currentColor}.admonition.is-small,#documenter .docs-sidebar form.docs-search>input.admonition{font-size:.75rem}.admonition.is-medium{font-size:1.25rem}.admonition.is-large{font-size:1.5rem}.admonition.is-default{background-color:#b5b5b5;border-color:#363636}.admonition.is-default>.admonition-header{background-color:#363636;color:#fff}.admonition.is-default>.admonition-body{color:#fff}.admonition.is-info{background-color:#def0fc;border-color:#209cee}.admonition.is-info>.admonition-header{background-color:#209cee;color:#fff}.admonition.is-info>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-success{background-color:#bdf4d1;border-color:#22c35b}.admonition.is-success>.admonition-header{background-color:#22c35b;color:#fff}.admonition.is-success>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-warning{background-color:#fff3c5;border-color:#ffdd57}.admonition.is-warning>.admonition-header{background-color:#ffdd57;color:rgba(0,0,0,0.7)}.admonition.is-warning>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-danger{background-color:#ffaba7;border-color:#da0b00}.admonition.is-danger>.admonition-header{background-color:#da0b00;color:#fff}.admonition.is-danger>.admonition-body{color:rgba(0,0,0,0.7)}.admonition.is-compat{background-color:#bdeff5;border-color:#1db5c9}.admonition.is-compat>.admonition-header{background-color:#1db5c9;color:#fff}.admonition.is-compat>.admonition-body{color:rgba(0,0,0,0.7)}.admonition-header{color:#fff;background-color:#363636;align-items:center;font-weight:700;justify-content:space-between;line-height:1.25;padding:0.5rem .75rem;position:relative}.admonition-header:before{font-family:"Font Awesome 5 Free";font-weight:900;margin-right:.75rem;content:"\f06a"}.admonition-body{color:#222;padding:0.5rem .75rem}.admonition-body pre{background-color:#f5f5f5}.admonition-body code{background-color:rgba(0,0,0,0.05)}.docstring{margin-bottom:1em;background-color:rgba(0,0,0,0);border:1px solid #dbdbdb;box-shadow:2px 2px 3px rgba(10,10,10,0.1);max-width:100%}.docstring>header{display:flex;flex-grow:1;align-items:stretch;padding:0.5rem .75rem;background-color:#f5f5f5;box-shadow:0 1px 2px rgba(10,10,10,0.1);box-shadow:none;border-bottom:1px solid #dbdbdb}.docstring>header code{background-color:transparent}.docstring>header .docstring-binding{margin-right:0.3em}.docstring>header .docstring-category{margin-left:0.3em}.docstring>section{position:relative;padding:.75rem .75rem;border-bottom:1px solid #dbdbdb}.docstring>section:last-child{border-bottom:none}.docstring>section>a.docs-sourcelink{transition:opacity 0.3s;opacity:0;position:absolute;right:.375rem;bottom:.375rem}.docstring>section>a.docs-sourcelink:focus{opacity:1 !important}.docstring:hover>section>a.docs-sourcelink{opacity:0.2}.docstring:focus-within>section>a.docs-sourcelink{opacity:0.2}.docstring>section:hover a.docs-sourcelink{opacity:1}.documenter-example-output{background-color:#fff}.outdated-warning-overlay{position:fixed;top:0;left:0;right:0;box-shadow:0 0 10px rgba(0,0,0,0.3);z-index:999;background-color:#ffaba7;color:rgba(0,0,0,0.7);border-bottom:3px solid #da0b00;padding:10px 35px;text-align:center;font-size:15px}.outdated-warning-overlay .outdated-warning-closer{position:absolute;top:calc(50% - 10px);right:18px;cursor:pointer;width:12px}.outdated-warning-overlay a{color:#2e63b8}.outdated-warning-overlay a:hover{color:#363636}.content pre{border:1px solid #dbdbdb}.content code{font-weight:inherit}.content a code{color:#2e63b8}.content h1 code,.content h2 code,.content h3 code,.content h4 code,.content h5 code,.content h6 code{color:#222}.content table{display:block;width:initial;max-width:100%;overflow-x:auto}.content blockquote>ul:first-child,.content blockquote>ol:first-child,.content .admonition-body>ul:first-child,.content .admonition-body>ol:first-child{margin-top:0}pre,code{font-variant-ligatures:no-contextual}.breadcrumb a.is-disabled{cursor:default;pointer-events:none}.breadcrumb a.is-disabled,.breadcrumb a.is-disabled:hover{color:#222}.hljs{background:initial !important}.katex .katex-mathml{top:0;right:0}.katex-display,mjx-container,.MathJax_Display{margin:0.5em 0 !important}html{-moz-osx-font-smoothing:auto;-webkit-font-smoothing:auto}li.no-marker{list-style:none}#documenter .docs-main>article{overflow-wrap:break-word}#documenter .docs-main>article .math-container{overflow-x:auto;overflow-y:hidden}@media screen and (min-width: 1056px){#documenter .docs-main{max-width:52rem;margin-left:20rem;padding-right:1rem}}@media screen and (max-width: 1055px){#documenter .docs-main{width:100%}#documenter .docs-main>article{max-width:52rem;margin-left:auto;margin-right:auto;margin-bottom:1rem;padding:0 1rem}#documenter .docs-main>header,#documenter .docs-main>nav{max-width:100%;width:100%;margin:0}}#documenter .docs-main header.docs-navbar{background-color:#fff;border-bottom:1px solid #dbdbdb;z-index:2;min-height:4rem;margin-bottom:1rem;display:flex}#documenter .docs-main header.docs-navbar .breadcrumb{flex-grow:1}#documenter .docs-main header.docs-navbar .docs-right{display:flex;white-space:nowrap}#documenter .docs-main header.docs-navbar .docs-right .docs-icon,#documenter .docs-main header.docs-navbar .docs-right .docs-label,#documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{display:inline-block}#documenter .docs-main header.docs-navbar .docs-right .docs-label{padding:0;margin-left:0.3em}#documenter .docs-main header.docs-navbar .docs-right .docs-settings-button{margin:auto 0 auto 1rem}#documenter .docs-main header.docs-navbar .docs-right .docs-sidebar-button{font-size:1.5rem;margin:auto 0 auto 1rem}#documenter .docs-main header.docs-navbar>*{margin:auto 0}@media screen and (max-width: 1055px){#documenter .docs-main header.docs-navbar{position:sticky;top:0;padding:0 1rem;transition-property:top, box-shadow;-webkit-transition-property:top, box-shadow;transition-duration:0.3s;-webkit-transition-duration:0.3s}#documenter .docs-main header.docs-navbar.headroom--not-top{box-shadow:.2rem 0rem .4rem #bbb;transition-duration:0.7s;-webkit-transition-duration:0.7s}#documenter .docs-main header.docs-navbar.headroom--unpinned.headroom--not-top.headroom--not-bottom{top:-4.5rem;transition-duration:0.7s;-webkit-transition-duration:0.7s}}#documenter .docs-main section.footnotes{border-top:1px solid #dbdbdb}#documenter .docs-main section.footnotes li .tag:first-child,#documenter .docs-main section.footnotes li .docstring>section>a.docs-sourcelink:first-child,#documenter .docs-main section.footnotes li .content kbd:first-child,.content #documenter .docs-main section.footnotes li kbd:first-child{margin-right:1em;margin-bottom:0.4em}#documenter .docs-main .docs-footer{display:flex;flex-wrap:wrap;margin-left:0;margin-right:0;border-top:1px solid #dbdbdb;padding-top:1rem;padding-bottom:1rem}@media screen and (max-width: 1055px){#documenter .docs-main .docs-footer{padding-left:1rem;padding-right:1rem}}#documenter .docs-main .docs-footer .docs-footer-nextpage,#documenter .docs-main .docs-footer .docs-footer-prevpage{flex-grow:1}#documenter .docs-main .docs-footer .docs-footer-nextpage{text-align:right}#documenter .docs-main .docs-footer .flexbox-break{flex-basis:100%;height:0}#documenter .docs-main .docs-footer .footer-message{font-size:0.8em;margin:0.5em auto 0 auto;text-align:center}#documenter .docs-sidebar{display:flex;flex-direction:column;color:#0a0a0a;background-color:#f5f5f5;border-right:1px solid #dbdbdb;padding:0;flex:0 0 18rem;z-index:5;font-size:1rem;position:fixed;left:-18rem;width:18rem;height:100%;transition:left 0.3s}#documenter .docs-sidebar.visible{left:0;box-shadow:.4rem 0rem .8rem #bbb}@media screen and (min-width: 1056px){#documenter .docs-sidebar.visible{box-shadow:none}}@media screen and (min-width: 1056px){#documenter .docs-sidebar{left:0;top:0}}#documenter .docs-sidebar .docs-logo{margin-top:1rem;padding:0 1rem}#documenter .docs-sidebar .docs-logo>img{max-height:6rem;margin:auto}#documenter .docs-sidebar .docs-package-name{flex-shrink:0;font-size:1.5rem;font-weight:700;text-align:center;white-space:nowrap;overflow:hidden;padding:0.5rem 0}#documenter .docs-sidebar .docs-package-name .docs-autofit{max-width:16.2rem}#documenter .docs-sidebar .docs-package-name a,#documenter .docs-sidebar .docs-package-name a:hover{color:#0a0a0a}#documenter .docs-sidebar .docs-version-selector{border-top:1px solid #dbdbdb;display:none;padding:0.5rem}#documenter .docs-sidebar .docs-version-selector.visible{display:flex}#documenter .docs-sidebar ul.docs-menu{flex-grow:1;user-select:none;border-top:1px solid #dbdbdb;padding-bottom:1.5rem}#documenter .docs-sidebar ul.docs-menu>li>.tocitem{font-weight:bold}#documenter .docs-sidebar ul.docs-menu>li li{font-size:.95rem;margin-left:1em;border-left:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu input.collapse-toggle{display:none}#documenter .docs-sidebar ul.docs-menu ul.collapsed{display:none}#documenter .docs-sidebar ul.docs-menu input:checked~ul.collapsed{display:block}#documenter .docs-sidebar ul.docs-menu label.tocitem{display:flex}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-label{flex-grow:2}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron{display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1;font-size:.75rem;margin-left:1rem;margin-top:auto;margin-bottom:auto}#documenter .docs-sidebar ul.docs-menu label.tocitem .docs-chevron::before{font-family:"Font Awesome 5 Free";font-weight:900;content:"\f054"}#documenter .docs-sidebar ul.docs-menu input:checked~label.tocitem .docs-chevron::before{content:"\f078"}#documenter .docs-sidebar ul.docs-menu .tocitem{display:block;padding:0.5rem 0.5rem}#documenter .docs-sidebar ul.docs-menu .tocitem,#documenter .docs-sidebar ul.docs-menu .tocitem:hover{color:#0a0a0a;background:#f5f5f5}#documenter .docs-sidebar ul.docs-menu a.tocitem:hover,#documenter .docs-sidebar ul.docs-menu label.tocitem:hover{color:#0a0a0a;background-color:#ebebeb}#documenter .docs-sidebar ul.docs-menu li.is-active{border-top:1px solid #dbdbdb;border-bottom:1px solid #dbdbdb;background-color:#fff}#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem,#documenter .docs-sidebar ul.docs-menu li.is-active .tocitem:hover{background-color:#fff;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu li.is-active ul.internal .tocitem:hover{background-color:#ebebeb;color:#0a0a0a}#documenter .docs-sidebar ul.docs-menu>li.is-active:first-child{border-top:none}#documenter .docs-sidebar ul.docs-menu ul.internal{margin:0 0.5rem 0.5rem;border-top:1px solid #dbdbdb}#documenter .docs-sidebar ul.docs-menu ul.internal li{font-size:.85rem;border-left:none;margin-left:0;margin-top:0.5rem}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem{width:100%;padding:0}#documenter .docs-sidebar ul.docs-menu ul.internal .tocitem::before{content:"⚬";margin-right:0.4em}#documenter .docs-sidebar form.docs-search{margin:auto;margin-top:0.5rem;margin-bottom:0.5rem}#documenter .docs-sidebar form.docs-search>input{width:14.4rem}@media screen and (min-width: 1056px){#documenter .docs-sidebar ul.docs-menu{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar ul.docs-menu::-webkit-scrollbar-thumb:hover{background:#ccc}}@media screen and (max-width: 1055px){#documenter .docs-sidebar{overflow-y:auto;-webkit-overflow-scroll:touch}#documenter .docs-sidebar::-webkit-scrollbar{width:.3rem;background:none}#documenter .docs-sidebar::-webkit-scrollbar-thumb{border-radius:5px 0px 0px 5px;background:#e0e0e0}#documenter .docs-sidebar::-webkit-scrollbar-thumb:hover{background:#ccc}}#documenter .docs-main #documenter-search-info{margin-bottom:1rem}#documenter .docs-main #documenter-search-results{list-style-type:circle;list-style-position:outside}#documenter .docs-main #documenter-search-results li{margin-left:2rem}#documenter .docs-main #documenter-search-results .docs-highlight{background-color:yellow}.ansi span.sgr1{font-weight:bolder}.ansi span.sgr2{font-weight:lighter}.ansi span.sgr3{font-style:italic}.ansi span.sgr4{text-decoration:underline}.ansi span.sgr7{color:#fff;background-color:#222}.ansi span.sgr8{color:transparent}.ansi span.sgr8 span{color:transparent}.ansi span.sgr9{text-decoration:line-through}.ansi span.sgr30{color:#242424}.ansi span.sgr31{color:#a7201f}.ansi span.sgr32{color:#066f00}.ansi span.sgr33{color:#856b00}.ansi span.sgr34{color:#2149b0}.ansi span.sgr35{color:#7d4498}.ansi span.sgr36{color:#007989}.ansi span.sgr37{color:gray}.ansi span.sgr40{background-color:#242424}.ansi span.sgr41{background-color:#a7201f}.ansi span.sgr42{background-color:#066f00}.ansi span.sgr43{background-color:#856b00}.ansi span.sgr44{background-color:#2149b0}.ansi span.sgr45{background-color:#7d4498}.ansi span.sgr46{background-color:#007989}.ansi span.sgr47{background-color:gray}.ansi span.sgr90{color:#616161}.ansi span.sgr91{color:#cb3c33}.ansi span.sgr92{color:#0e8300}.ansi span.sgr93{color:#a98800}.ansi span.sgr94{color:#3c5dcd}.ansi span.sgr95{color:#9256af}.ansi span.sgr96{color:#008fa3}.ansi span.sgr97{color:#f5f5f5}.ansi span.sgr100{background-color:#616161}.ansi span.sgr101{background-color:#cb3c33}.ansi span.sgr102{background-color:#0e8300}.ansi span.sgr103{background-color:#a98800}.ansi span.sgr104{background-color:#3c5dcd}.ansi span.sgr105{background-color:#9256af}.ansi span.sgr106{background-color:#008fa3}.ansi span.sgr107{background-color:#f5f5f5}code.language-julia-repl>span.hljs-meta{color:#066f00;font-weight:bolder}/*! + Theme: Default + Description: Original highlight.js style + Author: (c) Ivan Sagalaev + Maintainer: @highlightjs/core-team + Website: https://highlightjs.org/ + License: see project LICENSE + Touched: 2021 +*/pre code.hljs{display:block;overflow-x:auto}code.hljs{padding:3px 5px}.hljs{background:#F0F0F0;color:#444}.hljs-comment{color:#888888}.hljs-tag,.hljs-punctuation{color:#444a}.hljs-tag .hljs-name,.hljs-tag .hljs-attr{color:#444}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta .hljs-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-operator,.hljs-selector-pseudo{color:#BC6060}.hljs-literal{color:#78A960}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta .hljs-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold} diff --git a/v0.28.3/assets/themeswap.js b/v0.28.3/assets/themeswap.js new file mode 100644 index 0000000000..c58e993e3e --- /dev/null +++ b/v0.28.3/assets/themeswap.js @@ -0,0 +1,66 @@ +// Small function to quickly swap out themes. Gets put into the tag.. +function set_theme_from_local_storage() { + // Intialize the theme to null, which means default + var theme = null; + // If the browser supports the localstorage and is not disabled then try to get the + // documenter theme + if(window.localStorage != null) { + // Get the user-picked theme from localStorage. May be `null`, which means the default + // theme. + theme = window.localStorage.getItem("documenter-theme"); + } + // Check if the browser supports user color preference + var darkPreference = false; + // Check if the users preference is for dark color scheme + if(window.matchMedia('(prefers-color-scheme: dark)').matches === true) { + darkPreference = true; + } + // Initialize a few variables for the loop: + // + // - active: will contain the index of the theme that should be active. Note that there + // is no guarantee that localStorage contains sane values. If `active` stays `null` + // we either could not find the theme or it is the default (primary) theme anyway. + // Either way, we then need to stick to the primary theme. + // + // - disabled: style sheets that should be disabled (i.e. all the theme style sheets + // that are not the currently active theme) + var active = null; var disabled = []; var darkTheme = null; + for (var i = 0; i < document.styleSheets.length; i++) { + var ss = document.styleSheets[i]; + // The tag of each style sheet is expected to have a data-theme-name attribute + // which must contain the name of the theme. The names in localStorage much match this. + var themename = ss.ownerNode.getAttribute("data-theme-name"); + // attribute not set => non-theme stylesheet => ignore + if(themename === null) continue; + // To distinguish the default (primary) theme, it needs to have the data-theme-primary + // attribute set. + var isprimary = (ss.ownerNode.getAttribute("data-theme-primary") !== null); + // Check if the theme is primary dark theme + var isDarkTheme = (ss.ownerNode.getAttribute("data-theme-primary-dark") !== null); + // If ss is for dark theme then set the value of darkTheme to the name of the theme + if(isDarkTheme) darkTheme = themename; + // If we find a matching theme (and it's not the default), we'll set active to non-null + if(themename === theme) active = i; + // Store the style sheets of inactive themes so that we could disable them + if(themename !== theme) disabled.push(ss); + } + if(active !== null) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName('html')[0].className = "theme--" + theme; + // and (2) disable all the other theme stylesheets + disabled.forEach(function(ss){ + ss.disabled = true; + }); + } + else if(darkTheme !== null && darkPreference === true) { + // If we did find an active theme, we'll (1) add the theme--$(theme) class to + document.getElementsByTagName('html')[0].className = "theme--" + darkTheme; + // and (2) disable all the other theme stylesheets + disabled.forEach(function(ss){ + if (ss.ownerNode.getAttribute("data-theme-name") !== darkTheme) { + ss.disabled = true; + } + }); + } +} +set_theme_from_local_storage(); diff --git a/v0.28.3/assets/warner.js b/v0.28.3/assets/warner.js new file mode 100644 index 0000000000..5531c8851b --- /dev/null +++ b/v0.28.3/assets/warner.js @@ -0,0 +1,49 @@ +function maybeAddWarning () { + // DOCUMENTER_NEWEST is defined in versions.js, DOCUMENTER_CURRENT_VERSION and DOCUMENTER_STABLE + // in siteinfo.js. + // If either of these are undefined something went horribly wrong, so we abort. + if ( + window.DOCUMENTER_NEWEST === undefined || + window.DOCUMENTER_CURRENT_VERSION === undefined || + window.DOCUMENTER_STABLE === undefined + ) { + return + }; + + // Current version is not a version number, so we can't tell if it's the newest version. Abort. + if (!/v(\d+\.)*\d+/.test(window.DOCUMENTER_CURRENT_VERSION)) { + return + }; + + // Current version is newest version, so no need to add a warning. + if (window.DOCUMENTER_NEWEST === window.DOCUMENTER_CURRENT_VERSION) { + return + }; + + // Add a noindex meta tag (unless one exists) so that search engines don't index this version of the docs. + if (document.body.querySelector('meta[name="robots"]') === null) { + const meta = document.createElement('meta'); + meta.name = 'robots'; + meta.content = 'noindex'; + + document.getElementsByTagName('head')[0].appendChild(meta); + }; + + const div = document.createElement('div'); + div.classList.add('outdated-warning-overlay'); + const closer = document.createElement('button'); + closer.classList.add('outdated-warning-closer', 'delete'); + closer.addEventListener('click', function () { + document.body.removeChild(div); + }); + const href = window.documenterBaseURL + '/../' + window.DOCUMENTER_STABLE; + div.innerHTML = 'This documentation is not for the latest stable release, but for either the development version or an older release.
    Click here to go to the documentation for the latest stable release.'; + div.appendChild(closer); + document.body.appendChild(div); +}; + +if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', maybeAddWarning); +} else { + maybeAddWarning(); +}; diff --git a/v0.28.3/code_base_developer_guide/developer/index.html b/v0.28.3/code_base_developer_guide/developer/index.html new file mode 100644 index 0000000000..a99a1c5d7d --- /dev/null +++ b/v0.28.3/code_base_developer_guide/developer/index.html @@ -0,0 +1,2 @@ + +Developer Guide · PowerSimulations.jl
    diff --git a/v0.28.3/code_base_developer_guide/extending_powersimulations/index.html b/v0.28.3/code_base_developer_guide/extending_powersimulations/index.html new file mode 100644 index 0000000000..4a02d21723 --- /dev/null +++ b/v0.28.3/code_base_developer_guide/extending_powersimulations/index.html @@ -0,0 +1,36 @@ + +Extending Source Code Functionalities · PowerSimulations.jl

    Extending Source Code Functionalities

    Enable other recorder events

    Other types of recorder events can be enabled with a possible performance impact. To do this pass in the specific recorder names to be enabled when you call build.

    sim = Simulation(...)
    +recorders = [:execution]
    +build!(sim; recorders = recorders)
    +execute!(sim)

    Now we can examine InitialConditionUpdateEvents for specific steps and stages.

    show_simulation_events(
    +    PSI.InitialConditionUpdateEvent,
    +    "./output/aggregation/1",
    +    x -> x.initial_condition_type == "DeviceStatus";
    +    step = 2,
    +    stage = 1
    +)
    +┌─────────────────────────────┬─────────────────────┬────────────────────────┬─────────────────┬─────────────┬─────┬──────────────┐
    +│                        name │     simulation_time │ initial_condition_type │     device_type │ device_name │ val │ stage_number │
    +├─────────────────────────────┼─────────────────────┼────────────────────────┼─────────────────┼─────────────┼─────┼──────────────┤
    +│ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │           DeviceStatus │ ThermalStandard │    Solitude │ 0.0 │            1 │
    +│ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │           DeviceStatus │ ThermalStandard │   Park City │ 1.0 │            1 │
    +│ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │           DeviceStatus │ ThermalStandard │        Alta │ 1.0 │            1 │
    +│ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │           DeviceStatus │ ThermalStandard │    Brighton │ 1.0 │            1 │
    +│ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │           DeviceStatus │ ThermalStandard │    Sundance │ 0.0 │            1 │
    +└─────────────────────────────┴─────────────────────┴────────────────────────┴─────────────────┴─────────────┴─────┴──────────────┘

    Show the wall time with your events

    Sometimes you might want to see how the events line up with the wall time.

    show_simulation_events(
    +    PSI.InitialConditionUpdateEvent,
    +    "./output/aggregation/1",
    +    x -> x.initial_condition_type == "DeviceStatus";
    +    step = 2,
    +    stage = 1,
    +    wall_time = true
    +)
    +┌─────────────────────────┬─────────────────────────────┬─────────────────────┬────────────────────────┬─────────────────┬─────────────┬─────┬──────────────┐
    +│               timestamp │                        name │     simulation_time │ initial_condition_type │     device_type │ device_name │ val │ stage_number │
    +├─────────────────────────┼─────────────────────────────┼─────────────────────┼────────────────────────┼─────────────────┼─────────────┼─────┼──────────────┤
    +│ 2020-04-07T15:08:32.711 │ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │           DeviceStatus │ ThermalStandard │    Solitude │ 0.0 │            1 │
    +│ 2020-04-07T15:08:32.711 │ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │           DeviceStatus │ ThermalStandard │   Park City │ 1.0 │            1 │
    +│ 2020-04-07T15:08:32.711 │ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │           DeviceStatus │ ThermalStandard │        Alta │ 1.0 │            1 │
    +│ 2020-04-07T15:08:32.711 │ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │           DeviceStatus │ ThermalStandard │    Brighton │ 1.0 │            1 │
    +│ 2020-04-07T15:08:32.711 │ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │           DeviceStatus │ ThermalStandard │    Sundance │ 0.0 │            1 │
    +└─────────────────────────┴─────────────────────────────┴─────────────────────┴────────────────────────┴─────────────────┴─────────────┴─────┴──────────────┘
    diff --git a/v0.28.3/code_base_developer_guide/troubleshooting/index.html b/v0.28.3/code_base_developer_guide/troubleshooting/index.html new file mode 100644 index 0000000000..664f682417 --- /dev/null +++ b/v0.28.3/code_base_developer_guide/troubleshooting/index.html @@ -0,0 +1,2 @@ + +Troubleshooting · PowerSimulations.jl diff --git a/v0.28.3/formulation_library/Branch/index.html b/v0.28.3/formulation_library/Branch/index.html new file mode 100644 index 0000000000..41f7da7c16 --- /dev/null +++ b/v0.28.3/formulation_library/Branch/index.html @@ -0,0 +1,38 @@ + +Branch · PowerSimulations.jl

    PowerSystems.Branch Formulations

    Note

    The use of reactive power variables and constraints will depend on the network model used, i.e., whether it uses (or does not use) reactive power. If the network model is purely active power-based, reactive power variables and related constraints are not created.

    Table of contents

    1. StaticBranch
    2. StaticBranchBounds
    3. StaticBranchUnbounded
    4. HVDCTwoTerminalUnbounded
    5. HVDCTwoTerminalLossless
    6. HVDCTwoTerminalDispatch
    7. PhaseAngleControl
    8. Valid configurations

    StaticBranch

    Formulation valid for PTDFPowerModel Network model

    Variables:

    If Slack variables are enabled:

    Static Parameters

    • $R^\text{max}$ = PowerSystems.get_rating(branch)

    Objective:

    Add a large proportional cost to the objective function if rate constraint slack variables are used $+ (f^\text{sl,up} + f^\text{sl,lo}) \cdot 2 \cdot 10^5$

    Expressions:

    No expressions are used.

    Constraints:

    For each branch $b \in \{1,\dots, B\}$ (in a system with $N$ buses) the constraints are given by:

    \[\begin{aligned} +& f_t = \sum_{i=1}^N \text{PTDF}_{i,b} \cdot \text{Bal}_{i,t}, \quad \forall t \in \{1,\dots, T\}\\ +& f_t - f_t^\text{sl,up} \le R^\text{max},\quad \forall t \in \{1,\dots, T\} \\ +& f_t + f_t^\text{sl,lo} \ge -R^\text{max},\quad \forall t \in \{1,\dots, T\} +\end{aligned}\]

    on which $\text{PTDF}$ is the $N \times B$ system Power Transfer Distribution Factors (PTDF) matrix, and $\text{Bal}_{i,t}$ is the active power bus balance expression (i.e. $\text{Generation}_{i,t} - \text{Demand}_{i,t}$) at bus $i$ at time-step $t$.


    StaticBranchBounds

    Formulation valid for PTDFPowerModel Network model

    Variables:

    Static Parameters

    • $R^\text{max}$ = PowerSystems.get_rating(branch)

    Objective:

    No cost is added to the objective function.

    Expressions:

    No expressions are used.

    Constraints:

    For each branch $b \in \{1,\dots, B\}$ (in a system with $N$ buses) the constraints are given by:

    \[\begin{aligned} +& f_t = \sum_{i=1}^N \text{PTDF}_{i,b} \cdot \text{Bal}_{i,t}, \quad \forall t \in \{1,\dots, T\} +\end{aligned}\]

    on which $\text{PTDF}$ is the $N \times B$ system Power Transfer Distribution Factors (PTDF) matrix, and $\text{Bal}_{i,t}$ is the active power bus balance expression (i.e. $\text{Generation}_{i,t} - \text{Demand}_{i,t}$) at bus $i$ at time-step $t$.


    StaticBranchUnbounded

    Formulation valid for PTDFPowerModel Network model

    Objective:

    No cost is added to the objective function.

    Expressions:

    No expressions are used.

    Constraints:

    For each branch $b \in \{1,\dots, B\}$ (in a system with $N$ buses) the constraints are given by:

    \[\begin{aligned} +& f_t = \sum_{i=1}^N \text{PTDF}_{i,b} \cdot \text{Bal}_{i,t}, \quad \forall t \in \{1,\dots, T\} +\end{aligned}\]

    on which $\text{PTDF}$ is the $N \times B$ system Power Transfer Distribution Factors (PTDF) matrix, and $\text{Bal}_{i,t}$ is the active power bus balance expression (i.e. $\text{Generation}_{i,t} - \text{Demand}_{i,t}$) at bus $i$ at time-step $t$.


    HVDCTwoTerminalUnbounded

    Formulation valid for PTDFPowerModel Network model

    This model assumes that it can transfer power from two AC buses without losses and no limits.

    Variables:

    Objective:

    No cost is added to the objective function.

    Expressions:

    The variable FlowActivePowerVariable $f$ is added to the nodal balance expression ActivePowerBalance, by adding the flow $f$ in the receiving bus and subtracting it from the sending bus. This is used then to compute the AC flows using the PTDF equation.

    Constraints:

    No constraints are added.


    HVDCTwoTerminalLossless

    Formulation valid for PTDFPowerModel Network model

    This model assumes that it can transfer power from two AC buses without losses.

    Variables:

    Static Parameters

    • $R^\text{from,min}$ = PowerSystems.get_active_power_limits_from(branch).min
    • $R^\text{from,max}$ = PowerSystems.get_active_power_limits_from(branch).max
    • $R^\text{to,min}$ = PowerSystems.get_active_power_limits_to(branch).min
    • $R^\text{to,max}$ = PowerSystems.get_active_power_limits_to(branch).max

    Objective:

    No cost is added to the objective function.

    Expressions:

    The variable FlowActivePowerVariable $f$ is added to the nodal balance expression ActivePowerBalance, by adding the flow $f$ in the receiving bus and subtracting it from the sending bus. This is used then to compute the AC flows using the PTDF equation.

    Constraints:

    \[\begin{align*} +& R^\text{min} \le f_t \le R^\text{max},\quad \forall t \in \{1,\dots, T\} \\ +\end{align*}\]

    where:

    \[\begin{align*} +& R^\text{min} = \begin{cases} + \min\left(R^\text{from,min}, R^\text{to,min}\right), & \text{if } R^\text{from,min} \ge 0 \text{ and } R^\text{to,min} \ge 0 \\ + \max\left(R^\text{from,min}, R^\text{to,min}\right), & \text{if } R^\text{from,min} \le 0 \text{ and } R^\text{to,min} \le 0 \\ + R^\text{from,min},& \text{if } R^\text{from,min} \le 0 \text{ and } R^\text{to,min} \ge 0 \\ + R^\text{to,min},& \text{if } R^\text{from,min} \ge 0 \text{ and } R^\text{to,min} \le 0 + \end{cases} +\end{align*}\]

    and

    \[\begin{align*} +& R^\text{max} = \begin{cases} + \min\left(R^\text{from,max}, R^\text{to,max}\right), & \text{if } R^\text{from,max} \ge 0 \text{ and } R^\text{to,max} \ge 0 \\ + \max\left(R^\text{from,max}, R^\text{to,max}\right), & \text{if } R^\text{from,max} \le 0 \text{ and } R^\text{to,max} \le 0 \\ + R^\text{from,max},& \text{if } R^\text{from,max} \le 0 \text{ and } R^\text{to,max} \ge 0 \\ + R^\text{to,max},& \text{if } R^\text{from,max} \ge 0 \text{ and } R^\text{to,max} \le 0 + \end{cases} +\end{align*}\]


    HVDCTwoTerminalDispatch

    Formulation valid for PTDFPowerModel Network model

    Variables

    Static Parameters

    • $R^\text{from,min}$ = PowerSystems.get_active_power_limits_from(branch).min
    • $R^\text{from,max}$ = PowerSystems.get_active_power_limits_from(branch).max
    • $R^\text{to,min}$ = PowerSystems.get_active_power_limits_to(branch).min
    • $R^\text{to,max}$ = PowerSystems.get_active_power_limits_to(branch).max
    • $L_0$ = PowerSystems.get_loss(branch).l0
    • $L_1$ = PowerSystems.get_loss(branch).l1

    Objective:

    No cost is added to the objective function.

    Expressions:

    Each FlowActivePowerToFromVariable $f^\text{to-from}$ and FlowActivePowerFromToVariable $f^\text{from-to}$ is added to the nodal balance expression ActivePowerBalance, by adding the respective flow in the receiving bus and subtracting it from the sending bus. That is, $f^\text{to-from}$ adds the flow to the from bus, and subtracts the flow from the to bus, while $f^\text{from-to}$ adds the flow to the to bus, and subtracts the flow from the from bus This is used then to compute the AC flows using the PTDF equation.

    In addition, the HVDCLosses are subtracted to the from bus in the ActivePowerBalance expression.

    Constraints:

    \[\begin{align*} +& R^\text{from,min} \le f_t^\text{from-to} \le R^\text{from,max}, \forall t \in \{1,\dots, T\} \\ +& R^\text{to,min} \le f_t^\text{to-from} \le R^\text{to,max},\quad \forall t \in \{1,\dots, T\} \\ +& f_t^\text{to-from} - f_t^\text{from-to} \le L_1 \cdot f_t^\text{to-from} - L_0,\quad \forall t \in \{1,\dots, T\} \\ +& f_t^\text{from-to} - f_t^\text{to-from} \ge L_1 \cdot f_t^\text{from-to} + L_0,\quad \forall t \in \{1,\dots, T\} \\ +& f_t^\text{from-to} - f_t^\text{to-from} \ge - M^\text{big} (1 - u^\text{dir}_t),\quad \forall t \in \{1,\dots, T\} \\ +& f_t^\text{to-from} - f_t^\text{from-to} \ge - M^\text{big} u^\text{dir}_t,\quad \forall t \in \{1,\dots, T\} \\ +& f_t^\text{to-from} - f_t^\text{from-to} \le \ell_t,\quad \forall t \in \{1,\dots, T\} \\ +& f_t^\text{from-to} - f_t^\text{to-from} \le \ell_t,\quad \forall t \in \{1,\dots, T\} +\end{align*}\]


    PhaseAngleControl

    Formulation valid for PTDFPowerModel Network model

    Variables:

    Static Parameters

    • $R^\text{max}$ = PowerSystems.get_rating(branch)
    • $\Theta^\text{min}$ = PowerSystems.get_phase_angle_limits(branch).min
    • $\Theta^\text{max}$ = PowerSystems.get_phase_angle_limits(branch).max
    • $X$ = PowerSystems.get_x(branch) (series reactance)

    Objective:

    No changes to objective function

    Expressions:

    Adds to the ActivePowerBalance expression the term $-\theta^\text{shift} /X$ to the from bus and $+\theta^\text{shift} /X$ to the to bus, that the PhaseShiftingTransformer is connected.

    Constraints:

    For each branch $b \in \{1,\dots, B\}$ (in a system with $N$ buses) the constraints are given by:

    \[\begin{aligned} +& f_t = \sum_{i=1}^N \text{PTDF}_{i,b} \cdot \text{Bal}_{i,t} + \frac{\theta^\text{shift}_t}{X}, \quad \forall t \in \{1,\dots, T\}\\ +& -R^\text{max} \le f_t \le R^\text{max},\quad \forall t \in \{1,\dots, T\} +\end{aligned}\]

    on which $\text{PTDF}$ is the $N \times B$ system Power Transfer Distribution Factors (PTDF) matrix, and $\text{Bal}_{i,t}$ is the active power bus balance expression (i.e. $\text{Generation}_{i,t} - \text{Demand}_{i,t}$) at bus $i$ at time-step $t$.


    Valid configurations

    Valid DeviceModels for subtypes of Branch include the following:

    Valid DeviceModelDevice TypeFormulation
    DeviceModel(PhaseShiftingTransformer, PhaseAngleControl)PhaseShiftingTransformerPhaseAngleControl
    DeviceModel(TwoTerminalHVDCLine, HVDCTwoTerminalDispatch)TwoTerminalHVDCLineHVDCTwoTerminalDispatch
    DeviceModel(TwoTerminalVSCDCLine, HVDCTwoTerminalDispatch)TwoTerminalVSCDCLineHVDCTwoTerminalDispatch
    DeviceModel(TwoTerminalHVDCLine, HVDCTwoTerminalLossless)TwoTerminalHVDCLineHVDCTwoTerminalLossless
    DeviceModel(TwoTerminalVSCDCLine, HVDCTwoTerminalLossless)TwoTerminalVSCDCLineHVDCTwoTerminalLossless
    DeviceModel(TwoTerminalHVDCLine, HVDCTwoTerminalUnbounded)TwoTerminalHVDCLineHVDCTwoTerminalUnbounded
    DeviceModel(TwoTerminalVSCDCLine, HVDCTwoTerminalUnbounded)TwoTerminalVSCDCLineHVDCTwoTerminalUnbounded
    DeviceModel(Line, StaticBranch)LineStaticBranch
    DeviceModel(MonitoredLine, StaticBranch)MonitoredLineStaticBranch
    DeviceModel(PhaseShiftingTransformer, StaticBranch)PhaseShiftingTransformerStaticBranch
    DeviceModel(TapTransformer, StaticBranch)TapTransformerStaticBranch
    DeviceModel(Transformer2W, StaticBranch)Transformer2WStaticBranch
    DeviceModel(TwoTerminalHVDCLine, StaticBranch)TwoTerminalHVDCLineStaticBranch
    DeviceModel(TwoTerminalVSCDCLine, StaticBranch)TwoTerminalVSCDCLineStaticBranch
    DeviceModel(AreaInterchange, StaticBranch)AreaInterchangeStaticBranch
    DeviceModel(Line, StaticBranchBounds)LineStaticBranchBounds
    DeviceModel(MonitoredLine, StaticBranchBounds)MonitoredLineStaticBranchBounds
    DeviceModel(PhaseShiftingTransformer, StaticBranchBounds)PhaseShiftingTransformerStaticBranchBounds
    DeviceModel(TapTransformer, StaticBranchBounds)TapTransformerStaticBranchBounds
    DeviceModel(Transformer2W, StaticBranchBounds)Transformer2WStaticBranchBounds
    DeviceModel(TwoTerminalHVDCLine, StaticBranchBounds)TwoTerminalHVDCLineStaticBranchBounds
    DeviceModel(TwoTerminalVSCDCLine, StaticBranchBounds)TwoTerminalVSCDCLineStaticBranchBounds
    DeviceModel(Line, StaticBranchUnbounded)LineStaticBranchUnbounded
    DeviceModel(MonitoredLine, StaticBranchUnbounded)MonitoredLineStaticBranchUnbounded
    DeviceModel(PhaseShiftingTransformer, StaticBranchUnbounded)PhaseShiftingTransformerStaticBranchUnbounded
    DeviceModel(TapTransformer, StaticBranchUnbounded)TapTransformerStaticBranchUnbounded
    DeviceModel(Transformer2W, StaticBranchUnbounded)Transformer2WStaticBranchUnbounded
    DeviceModel(TwoTerminalHVDCLine, StaticBranchUnbounded)TwoTerminalHVDCLineStaticBranchUnbounded
    DeviceModel(TwoTerminalVSCDCLine, StaticBranchUnbounded)TwoTerminalVSCDCLineStaticBranchUnbounded
    DeviceModel(AreaInterchange, StaticBranchUnbounded)AreaInterchangeStaticBranchUnbounded
    diff --git a/v0.28.3/formulation_library/Feedforward/index.html b/v0.28.3/formulation_library/Feedforward/index.html new file mode 100644 index 0000000000..890a9dc8e2 --- /dev/null +++ b/v0.28.3/formulation_library/Feedforward/index.html @@ -0,0 +1,33 @@ + +Feedforwards · PowerSimulations.jl

    FeedForward Formulations

    FeedForwards are the mechanism to define how information is shared between models. Specifically, a FeedForward defines what to do with information passed with an inter-stage chronology in a Simulation. The most common FeedForward is the SemiContinuousFeedForward that affects the semi-continuous range constraints of thermal generators in the economic dispatch problems based on the value of the (already solved) unit-commitment variables.

    The creation of a FeedForward requires at least specifying the component_type on which the FeedForward will be applied. The source variable specifies which variable will be taken from the problem solved, for example, the commitment variable of the thermal unit in the unit commitment problem. Finally, the affected_values specify which variables will be affected in the problem to be solved, for example, the next economic dispatch problem.

    Table of contents

    1. SemiContinuousFeedforward
    2. FixValueFeedforward
    3. UpperBoundFeedforward
    4. LowerBoundFeedforward

    SemiContinuousFeedforward

    PowerSimulations.SemiContinuousFeedforwardType
    SemiContinuousFeedforward(
    +    component_type::Type{<:PSY.Component},
    +    source::Type{T},
    +    affected_values::Vector{DataType},
    +    meta = CONTAINER_KEY_EMPTY_META
    +) where {T}

    It allows to enable/disable bounds to 0.0 for a specified variable. Commonly used to limit the ActivePowerVariable in an Economic Dispatch problem by the commitment decision taken in an another problem (typically a Unit Commitment problem).

    Arguments:

    • component_type::Type{<:PSY.Component} : Specify the type of component on which the Feedforward will be applied
    • source::Type{T} : Specify the VariableType, ParameterType or AuxVariableType as the source of values for the Feedforward
    • affected_values::Vector{DataType} : Specify the variable on which the semicontinuous limit will be applied using the source values
    source

    Variables:

    No variables are created

    Parameters:

    • $\text{on}^\text{th}$ = OnStatusParameter obtained from the source variable, typically the commitment variable of the unit commitment problem $u^\text{th}$.

    Objective:

    No changes to the objective function.

    Expressions:

    Adds $-\text{on}^\text{th}P^\text{th,max}$ to the ActivePowerRangeExpressionUB expression and $-\text{on}^\text{th}P^\text{th,min}$ to the ActivePowerRangeExpressionLB expression.

    Constraints:

    Limits the ActivePowerRangeExpressionUB and ActivePowerRangeExpressionLB by zero as:

    \[\begin{align*} +& \text{ActivePowerRangeExpressionUB}_t := p_t^\text{th} - \text{on}_t^\text{th}P^\text{th,max} \le 0, \quad \forall t\in \{1, \dots, T\} \\ +& \text{ActivePowerRangeExpressionLB}_t := p_t^\text{th} - \text{on}_t^\text{th}P^\text{th,min} \ge 0, \quad \forall t\in \{1, \dots, T\} +\end{align*}\]

    Thus, if the commitment parameter is zero, the dispatch is limited to zero, forcing to turn off the generator without introducing binary variables in the economic dispatch problem.


    FixValueFeedforward

    PowerSimulations.FixValueFeedforwardType
    FixValueFeedforward(
    +    component_type::Type{<:PSY.Component},
    +    source::Type{T},
    +    affected_values::Vector{DataType},
    +    meta = CONTAINER_KEY_EMPTY_META
    +) where {T}

    Fixes a Variable or Parameter Value in the model from another problem. Is the only Feed Forward that can be used with a Parameter or a Variable as the affected value.

    Arguments:

    • component_type::Type{<:PSY.Component} : Specify the type of component on which the Feedforward will be applied
    • source::Type{T} : Specify the VariableType, ParameterType or AuxVariableType as the source of values for the Feedforward
    • affected_values::Vector{DataType} : Specify the variable on which the fix value will be applied using the source values
    source

    Variables:

    No variables are created

    Parameters:

    The parameter FixValueParameter is used to match the result obtained from the source variable (from the simulation state).

    Objective:

    No changes to the objective function.

    Expressions:

    No changes on expressions.

    Constraints:

    Set the VariableType from the affected_values to be equal to the source parameter store in FixValueParameter

    \[\begin{align*} +& \text{AffectedVariable}_t = \text{SourceVariableParameter}_t, \quad \forall t \in \{1,\dots, T\} +\end{align*}\]


    UpperBoundFeedforward

    PowerSimulations.UpperBoundFeedforwardType
    UpperBoundFeedforward(
    +    component_type::Type{<:PSY.Component},
    +    source::Type{T},
    +    affected_values::Vector{DataType},
    +    add_slacks::Bool = false,
    +    meta = CONTAINER_KEY_EMPTY_META
    +) where {T}

    Constructs a parameterized upper bound constraint to implement feedforward from other models.

    Arguments:

    • component_type::Type{<:PSY.Component} : Specify the type of component on which the Feedforward will be applied
    • source::Type{T} : Specify the VariableType, ParameterType or AuxVariableType as the source of values for the Feedforward
    • affected_values::Vector{DataType} : Specify the variable on which the upper bound will be applied using the source values
    • add_slacks::Bool = false : Add slacks variables to relax the upper bound constraint.
    source

    Variables:

    If slack variables are enabled:

    Parameters:

    The parameter UpperBoundValueParameter stores the result obtained from the source variable (from the simulation state) that will be used as an upper bound to the affected variable.

    Objective:

    The slack variable is added to the objective function using its large default cost $+ p^\text{ff,ubsl} \cdot 10^6$

    Expressions:

    No changes on expressions.

    Constraints:

    Set the VariableType from the affected_values to be lower than the source parameter store in UpperBoundValueParameter.

    \[\begin{align*} +& \text{AffectedVariable}_t - p_t^\text{ff,ubsl} \le \text{SourceVariableParameter}_t, \quad \forall t \in \{1,\dots, T\} +\end{align*}\]


    LowerBoundFeedforward

    PowerSimulations.LowerBoundFeedforwardType
    LowerBoundFeedforward(
    +    component_type::Type{<:PSY.Component},
    +    source::Type{T},
    +    affected_values::Vector{DataType},
    +    add_slacks::Bool = false,
    +    meta = CONTAINER_KEY_EMPTY_META
    +) where {T}

    Constructs a parameterized lower bound constraint to implement feedforward from other models.

    Arguments:

    • component_type::Type{<:PSY.Component} : Specify the type of component on which the Feedforward will be applied
    • source::Type{T} : Specify the VariableType, ParameterType or AuxVariableType as the source of values for the Feedforward
    • affected_values::Vector{DataType} : Specify the variable on which the lower bound will be applied using the source values
    • add_slacks::Bool = false : Add slacks variables to relax the lower bound constraint.
    source

    Variables:

    If slack variables are enabled:

    Parameters:

    The parameter LowerBoundValueParameter stores the result obtained from the source variable (from the simulation state) that will be used as a lower bound to the affected variable.

    Objective:

    The slack variable is added to the objective function using its large default cost $+ p^\text{ff,lbsl} \cdot 10^6$

    Expressions:

    No changes on expressions.

    Constraints:

    Set the VariableType from the affected_values to be greater than the source parameter store in LowerBoundValueParameter.

    \[\begin{align*} +& \text{AffectedVariable}_t + p_t^\text{ff,lbsl} \ge \text{SourceVariableParameter}_t, \quad \forall t \in \{1,\dots, T\} +\end{align*}\]

    diff --git a/v0.28.3/formulation_library/General/index.html b/v0.28.3/formulation_library/General/index.html new file mode 100644 index 0000000000..8be0de858c --- /dev/null +++ b/v0.28.3/formulation_library/General/index.html @@ -0,0 +1,10 @@ + +General · PowerSimulations.jl

    Formulations

    Modeling formulations are created by dispatching on abstract subtypes of PowerSimulations.AbstractDeviceFormulation

    FixedOutput

    Variables:

    No variables are created for DeviceModel(<:DeviceType, FixedOutput)

    Static Parameters:

    • ThermalGen:
      • $P^\text{th,max}$ = PowerSystems.get_max_active_power(device)
      • $Q^\text{th,max}$ = PowerSystems.get_max_reactive_power(device)
    • Storage:
      • $P^\text{st,max}$ = PowerSystems.get_max_active_power(device)
      • $Q^\text{st,max}$ = PowerSystems.get_max_reactive_power(device)

    Time Series Parameters:

    Device TypeParameterDefault Time Series Name
    RenewableGenReactivePowerTimeSeriesParametermax_active_power
    RenewableGenActivePowerTimeSeriesParametermax_active_power
    HydroGenReactivePowerTimeSeriesParametermax_active_power
    HydroGenActivePowerTimeSeriesParametermax_active_power
    ElectricLoadReactivePowerTimeSeriesParametermax_active_power
    ElectricLoadActivePowerTimeSeriesParametermax_active_power

    Objective:

    No objective terms are created for DeviceModel(<:DeviceType, FixedOutput)

    Expressions:

    Adds the active and reactive parameters listed for specific device types above to the respective active and reactive power balance expressions created by the selected Network Formulations.

    Constraints:

    No constraints are created for DeviceModel(<:DeviceType, FixedOutput)


    FunctionData Options

    PowerSimulations can represent variable costs using a variety of different methods depending on the data available in each device. The following describes the objective function terms that are populated for each variable cost option.

    LinearFunctionData

    variable_cost = LinearFunctionData(c): creates a fixed marginal cost term in the objective function

    \[\begin{aligned} +& \text{min} \sum_{t} c * G_t +\end{aligned}\]

    QuadraticFunctionData and PolynomialFunctionData

    variable_cost::QuadraticFunctionData and variable_cost::PolynomialFunctionData: create a polynomial cost term in the objective function

    \[\begin{aligned} +& \text{min} \sum_{t} \sum_{n} C_n * G_t^n +\end{aligned}\]

    where

    • For QuadraticFunctionData:
      • $C_0$ = get_constant_term(variable_cost)
      • $C_1$ = get_proportional_term(variable_cost)
      • $C_2$ = get_quadratic_term(variable_cost)
    • For PolynomialFunctionData:
      • $C_n$ = get_coefficients(variable_cost)[n]

    `andPiecewiseLinearSlopeData`

    variable_cost::PiecewiseLinearData and variable_cost::PiecewiseLinearSlopeData: create a piecewise linear cost term in the objective function

    \[\begin{aligned} +& \text{min} \sum_{t} f(G_t) +\end{aligned}\]

    where

    • For variable_cost::PiecewiseLinearData, $f(x)$ is the piecewise linear function obtained by connecting the (x, y) points get_points(variable_cost) in order.
    • For variable_cost = PiecewiseLinearSlopeData([x0, x1, x2, ...], y0, [s0, s1, s2, ...]), $f(x)$ is the piecewise linear function obtained by starting at (x0, y0), drawing a segment at slope s0 to x=x1, drawing a segment at slope s1 to x=x2, etc.

    StorageCost

    Adds an objective function cost term according to:

    \[\begin{aligned} +& \text{min} \sum_{t} \quad [E^{surplus}_t * C^{penalty} - E^{shortage}_t * C^{value}] +\end{aligned}\]

    Impact of different cost configurations:

    The following table describes all possible configurations of the StorageCost with the target constraint in hydro or storage device models. Cases 1(a) & 2(a) will not impact the model's operations, and the target constraint will be rendered useless. In most cases that have no energy target and a non-zero value for $C^{value}$, if this cost is too high ($C^{value} >> 0$) or too low ($C^{value} <<0$) can result in either the model holding on to stored energy till the end of the model not storing any energy in the device. This is caused by the fact that when the energy target is zero, we have $E_t = - E^{shortage}_t$, and $- E^{shortage}_t * C^{value}$ in the objective function is replaced by $E_t * C^{value}$, thus resulting in $C^{value}$ to be seen as the cost of stored energy.

    CaseEnergy TargetEnergy Shortage CostEnergy Value / Energy Surplus costEffect
    Case 1(a)$\hat{E}=0$$C^{penalty}=0$$C^{value}=0$no change
    Case 1(b)$\hat{E}=0$$C^{penalty}=0$$C^{value}<0$penalty for storing energy
    Case 1(c)$\hat{E}=0$$C^{penalty}>0$$C^{value}=0$no penalties or incentives applied
    Case 1(d)$\hat{E}=0$$C^{penalty}=0$$C^{value}>0$incentive for storing energy
    Case 1(e)$\hat{E}=0$$C^{penalty}>0$$C^{value}<0$penalty for storing energy
    Case 1(f)$\hat{E}=0$$C^{penalty}>0$$C^{value}>0$incentive for storing energy
    Case 2(a)$\hat{E}>0$$C^{penalty}=0$$C^{value}=0$no change
    Case 2(b)$\hat{E}>0$$C^{penalty}=0$$C^{value}<0$penalty on energy storage in excess of target
    Case 2(c)$\hat{E}>0$$C^{penalty}>0$$C^{value}=0$penalty on energy storage short of target
    Case 2(d)$\hat{E}>0$$C^{penalty}=0$$C^{value}>0$incentive on excess energy
    Case 2(e)$\hat{E}>0$$C^{penalty}>0$$C^{value}<0$penalty on both excess/shortage of energy
    Case 2(f)$\hat{E}>0$$C^{penalty}>0$$C^{value}>0$penalty for shortage, incentive for excess energy
    diff --git a/v0.28.3/formulation_library/Introduction/index.html b/v0.28.3/formulation_library/Introduction/index.html new file mode 100644 index 0000000000..bf187e7674 --- /dev/null +++ b/v0.28.3/formulation_library/Introduction/index.html @@ -0,0 +1,15 @@ + +Introduction · PowerSimulations.jl

    Formulations Introduction

    PowerSimulations.jl enables modularity in its formulations by assigning a DeviceModel to each PowerSystems.jl component type existing in a defined system.

    PowerSimulations.jl has a multiple AbstractDeviceFormulation subtypes that can be applied to different PowerSystems.jl device types, each dispatching to different methods for populating the optimization problem variables, objective function, expressions and constraints.

    Example Formulation

    For example a typical optimization problem in a DecisionModel in PowerSimulations.jl with three DeviceModel has the abstract form of:

    \[\begin{align*} + &\min_{\boldsymbol{x}}~ \text{Objective\_DeviceModelA} + \text{Objective\_DeviceModelB} + \text{Objective\_DeviceModelC} \\ + & ~~\text{s.t.} \\ + & \hspace{0.9cm} \text{Constraints\_NetworkModel} \\ + & \hspace{0.9cm} \text{Constraints\_DeviceModelA} \\ + & \hspace{0.9cm} \text{Constraints\_DeviceModelB} \\ + & \hspace{0.9cm} \text{Constraints\_DeviceModelC} +\end{align*}\]

    Suppose this is a system with the following characteristics:

    • Horizon: 48 hours
    • Interval: 24 hours
    • Resolution: 1 hour
    • Three Buses: 1, 2 and 3
    • One ThermalStandard (device A) unit at bus 1
    • One RenewableDispatch (device B) unit at bus 2
    • One PowerLoad (device C) at bus 3
    • Three Line that connects all the buses

    Now, we assign the following DeviceModel to each PowerSystems.jl with:

    TypeFormulation
    NetworkCopperPlatePowerModel
    ThermalStandardThermalDispatchNoMin
    RenewableDispatchRenewableFullDispatch
    PowerLoadStaticPowerLoad

    Note that we did not assign any DeviceModel to Line since the CopperPlatePowerModel used for the network assumes that everything is lumped in the same node (like a copper plate with infinite capacity), and hence there are no flows between buses that branches can limit.

    Each DeviceModel formulation is described in specific in their respective page, but the overall optimization problem will end-up as:

    \[\begin{align*} + &\min_{\boldsymbol{p}^\text{th}, \boldsymbol{p}^\text{re}}~ \sum_{t=1}^{48} C^\text{th} p_t^\text{th} - C^\text{re} p_t^\text{re} \\ + & ~~\text{s.t.} \\ + & \hspace{0.9cm} p_t^\text{th} + p_t^\text{re} = P_t^\text{load}, \quad \forall t \in {1,\dots, 48} \\ + & \hspace{0.9cm} 0 \le p_t^\text{th} \le P^\text{th,max} \\ + & \hspace{0.9cm} 0 \le p_t^\text{re} \le \text{ActivePowerTimeSeriesParameter}_t +\end{align*}\]

    Note that the StaticPowerLoad does not impose any cost to the objective function or constraint but adds its power demand to the supply-balance demand of the CopperPlatePowerModel used. Since we are using the ThermalDispatchNoMin formulation for the thermal generation, the lower bound for the power is 0, instead of $P^\text{th,min}$. In addition, we are assuming a linear cost $C^\text{th}$. Finally, the RenewableFullDispatch formulation allows the dispatch of the renewable unit between 0 and its maximum injection time series $p_t^\text{re,param}$.

    Nomenclature

    In the formulations described in the other pages, the nomenclature is as follows:

    • Lowercase letters are used for variables, e.g., $p$ for power.
    • Uppercase letters are used for parameters, e.g., $C$ for costs.
    • Subscripts are used for indexing, e.g., $(\cdot)_t$ for indexing at time $t$.
    • Superscripts are used for descriptions, e.g., $(\cdot)^\text{th}$ to describe a thermal (th) variable/parameter.
    • Bold letters are used for vectors, e.g., $\boldsymbol{p} = \{p\}_{1,\dots,24}$.
    diff --git a/v0.28.3/formulation_library/Load/index.html b/v0.28.3/formulation_library/Load/index.html new file mode 100644 index 0000000000..26fa45bc48 --- /dev/null +++ b/v0.28.3/formulation_library/Load/index.html @@ -0,0 +1,8 @@ + +Load · PowerSimulations.jl

    PowerSystems.ElectricLoad Formulations

    Electric load formulations define the optimization models that describe load units (demand) mathematical model in different operational settings, such as economic dispatch and unit commitment.

    Note

    The use of reactive power variables and constraints will depend on the network model used, i.e., whether it uses (or does not use) reactive power. If the network model is purely active power-based, reactive power variables and related constraints are not created.

    Table of contents

    1. StaticPowerLoad
    2. PowerLoadInterruption
    3. PowerLoadDispatch
    4. Valid configurations

    StaticPowerLoad

    Variables:

    No variables are created

    Time Series Parameters:

    Uses the max_active_power timeseries parameter to determine the demand value at each time-step

    ParameterDefault Time Series Name
    ReactivePowerTimeSeriesParametermax_active_power
    ActivePowerTimeSeriesParametermax_active_power

    Expressions:

    Subtracts the parameters listed above from the respective active and reactive power balance expressions created by the selected Network Formulations.

    Constraints:

    No constraints are created


    PowerLoadInterruption

    Variables:

    Static Parameters:

    • $P^\text{ld,max}$ = PowerSystems.get_max_active_power(device)
    • $Q^\text{ld,max}$ = PowerSystems.get_max_reactive_power(device)

    Time Series Parameters:

    ParameterDefault Time Series Name
    ReactivePowerTimeSeriesParametermax_active_power
    ActivePowerTimeSeriesParametermax_active_power

    Objective:

    Creates an objective function term based on the FunctionData Options where the quantity term is defined as $p^\text{ld}$.

    Expressions:

    • Subtract$p^\text{ld}$ and $q^\text{ld}$ terms and to the respective active and reactive power balance expressions created by the selected Network Formulations

    Constraints:

    \[\begin{aligned} +& p_t^\text{ld} \le u_t^\text{ld} \cdot \text{ActivePowerTimeSeriesParameter}_t, \quad \forall t \in \{1,\dots, T\} \\ +& q_t^\text{re} = \text{pf} \cdot p_t^\text{re}, \quad \forall t \in \{1,\dots, T\} +\end{aligned}\]

    on which $\text{pf} = \sin(\arctan(Q^\text{ld,max}/P^\text{ld,max}))$.


    PowerLoadDispatch

    Variables:

    • ActivePowerVariable:
      • Bounds: [0.0, ]
      • Default initial value: PowerSystems.get_active_power(device)
      • Symbol: $p^\text{ld}$
    • ReactivePowerVariable:
      • Bounds: [0.0, ]
      • Default initial value: PowerSystems.get_reactive_power(device)
      • Symbol: $q^\text{ld}$

    Static Parameters:

    • $P^\text{ld,max}$ = PowerSystems.get_max_active_power(device)
    • $Q^\text{ld,max}$ = PowerSystems.get_max_reactive_power(device)

    Time Series Parameters:

    ParameterDefault Time Series Name
    ReactivePowerTimeSeriesParametermax_active_power
    ActivePowerTimeSeriesParametermax_active_power

    Objective:

    Creates an objective function term based on the FunctionData Options where the quantity term is defined as $p^\text{ld}$.

    Expressions:

    • Subtract$p^\text{ld}$ and $q^\text{ld}$ terms and to the respective active and reactive power balance expressions created by the selected Network Formulations

    Constraints:

    \[\begin{aligned} +& p_t^\text{ld} \le \text{ActivePowerTimeSeriesParameter}_t, \quad \forall t \in \{1,\dots, T\}\\ +& q_t^\text{ld} = \text{pf} \cdot p_t^\text{ld}, \quad \forall t \in \{1,\dots, T\}\\ +\end{aligned}\]

    on which $\text{pf} = \sin(\arctan(Q^\text{ld,max}/P^\text{ld,max}))$.

    Valid configurations

    Valid DeviceModels for subtypes of ElectricLoad include the following:

    Valid DeviceModelDevice TypeFormulation
    DeviceModel(InterruptiblePowerLoad, PowerLoadDispatch)InterruptiblePowerLoadPowerLoadDispatch
    DeviceModel(ExponentialLoad, PowerLoadDispatch)ExponentialLoadPowerLoadDispatch
    DeviceModel(PowerLoad, PowerLoadDispatch)PowerLoadPowerLoadDispatch
    DeviceModel(StandardLoad, PowerLoadDispatch)StandardLoadPowerLoadDispatch
    DeviceModel(InterruptiblePowerLoad, PowerLoadInterruption)InterruptiblePowerLoadPowerLoadInterruption
    DeviceModel(ExponentialLoad, PowerLoadInterruption)ExponentialLoadPowerLoadInterruption
    DeviceModel(PowerLoad, PowerLoadInterruption)PowerLoadPowerLoadInterruption
    DeviceModel(StandardLoad, PowerLoadInterruption)StandardLoadPowerLoadInterruption
    DeviceModel(FixedAdmittance, StaticPowerLoad)FixedAdmittanceStaticPowerLoad
    DeviceModel(InterruptiblePowerLoad, StaticPowerLoad)InterruptiblePowerLoadStaticPowerLoad
    DeviceModel(ExponentialLoad, StaticPowerLoad)ExponentialLoadStaticPowerLoad
    DeviceModel(PowerLoad, StaticPowerLoad)PowerLoadStaticPowerLoad
    DeviceModel(StandardLoad, StaticPowerLoad)StandardLoadStaticPowerLoad
    DeviceModel(SwitchedAdmittance, StaticPowerLoad)SwitchedAdmittanceStaticPowerLoad
    diff --git a/v0.28.3/formulation_library/Network/index.html b/v0.28.3/formulation_library/Network/index.html new file mode 100644 index 0000000000..c6dd1bbb8c --- /dev/null +++ b/v0.28.3/formulation_library/Network/index.html @@ -0,0 +1,8 @@ + +Network · PowerSimulations.jl

    Network Formulations

    Network formulations are used to describe how the network and buses are handled when constructing constraints. The most common constraint decided by the network formulation is the supply-demand balance constraint. Available Network Models are:

    FormulationDescription
    CopperPlatePowerModelCopper plate connection between all components, i.e. infinite transmission capacity
    AreaBalancePowerModelNetwork model approximation to represent inter-area flow with each area represented as a single node
    PTDFPowerModelUses the PTDF factor matrix to compute the fraction of power transferred in the network across the branches
    AreaPTDFPowerModelUses the PTDF factor matrix to compute the fraction of power transferred in the network across the branches and balances power by Area instead of system-wide

    PowerModels.jl available formulations:

    • Exact non-convex models: ACPPowerModel, ACRPowerModel, ACTPowerModel.
    • Linear approximations: DCPPowerModel, NFAPowerModel.
    • Quadratic approximations: DCPLLPowerModel, LPACCPowerModel
    • Quadratic relaxations: SOCWRPowerModel, SOCWRConicPowerModel, SOCBFPowerModel, SOCBFConicPowerModel, QCRMPowerModel, QCLSPowerModel.
    • SDP relaxations: SDPWRMPowerModel, SparseSDPWRMPowerModel.

    All of these formulations are described in the PowerModels.jl documentation and will not be described here.


    CopperPlatePowerModel

    Variables:

    If Slack variables are enabled:

    • SystemBalanceSlackUp:
      • Bounds: [0.0, ]
      • Default initial value: 0.0
      • Default proportional cost: 1e6
      • Symbol: $p^\text{sl,up}$
    • SystemBalanceSlackDown:
      • Bounds: [0.0, ]
      • Default initial value: 0.0
      • Default proportional cost: 1e6
      • Symbol: $p^\text{sl,dn}$

    Objective:

    Add a large proportional cost to the objective function if slack variables are used $+ (p^\text{sl,up} + p^\text{sl,dn}) \cdot 10^6$

    Expressions:

    Adds $p^\text{sl,up}$ and $p^\text{sl,dn}$ terms to the respective active power balance expressions ActivePowerBalance created by this CopperPlatePowerModel network formulation.

    Constraints:

    Adds the CopperPlateBalanceConstraint to balance the active power of all components available in the system

    \[\begin{align} +& \sum_{c \in \text{components}} p_t^c = 0, \quad \forall t \in \{1, \dots, T\} +\end{align}\]


    AreaBalancePowerModel

    Variables: If Slack variables are enabled:

    • SystemBalanceSlackUp by area:
      • Bounds: [0.0, ]
      • Default initial value: 0.0
      • Default proportional cost: 1e6
      • Symbol: $p^\text{sl,up}$
    • SystemBalanceSlackDown by area:
      • Bounds: [0.0, ]
      • Default initial value: 0.0
      • Default proportional cost: 1e6
      • Symbol: $p^\text{sl,dn}$

    Objective:

    Adds $p^\text{sl,up}$ and $p^\text{sl,dn}$ terms to the respective active power balance expressions ActivePowerBalance per area.

    Expressions:

    Creates ActivePowerBalance expressions for each area that then are used to balance active power for all buses within a single area.

    Constraints:

    Adds the CopperPlateBalanceConstraint to balance the active power of all components available in an area.

    \[\begin{align} +& \sum_{c \in \text{components}_a} p_t^c = 0, \quad \forall a\in \{1,\dots, A\}, t \in \{1, \dots, T\} +\end{align}\]


    PTDFPowerModel

    Variables:

    If Slack variables are enabled:

    • SystemBalanceSlackUp:
      • Bounds: [0.0, ]
      • Default initial value: 0.0
      • Default proportional cost: 1e6
      • Symbol: $p^\text{sl,up}$
    • SystemBalanceSlackDown:
      • Bounds: [0.0, ]
      • Default initial value: 0.0
      • Default proportional cost: 1e6
      • Symbol: $p^\text{sl,dn}$

    Objective:

    Add a large proportional cost to the objective function if slack variables are used $+ (p^\text{sl,up} + p^\text{sl,dn}) \cdot 10^6$

    Expressions:

    Adds $p^\text{sl,up}$ and $p^\text{sl,dn}$ terms to the respective system-wide active power balance expressions ActivePowerBalance created by this CopperPlatePowerModel network formulation. In addition, it creates ActivePowerBalance expressions for each bus to be used in the calculation of branch flows.

    Constraints:

    Adds the CopperPlateBalanceConstraint to balance the active power of all components available in the system

    \[\begin{align} +& \sum_{c \in \text{components}} p_t^c = 0, \quad \forall t \in \{1, \dots, T\} +\end{align}\]

    In addition creates NodalBalanceActiveConstraint for HVDC buses balance, if DC components are connected to an HVDC network.

    diff --git a/v0.28.3/formulation_library/Piecewise/index.html b/v0.28.3/formulation_library/Piecewise/index.html new file mode 100644 index 0000000000..db03329931 --- /dev/null +++ b/v0.28.3/formulation_library/Piecewise/index.html @@ -0,0 +1,30 @@ + +Piecewise Linear Cost · PowerSimulations.jl

    Piecewise linear cost functions

    The choice for piecewise-linear (PWL) cost representation in PowerSimulations.jl is equivalent to the so-called λ-model from the paper The Impacts of Convex Piecewise Linear Cost Formulations on AC Optimal Power Flow. The SOS constraints in each model are only implemented if the data for PWL is not convex.

    Special Ordered Set (SOS) Constraints

    A special ordered set (SOS) is an ordered set of variables used as an additional way to specify integrality conditions in an optimization model.

    • Special Ordered Sets of type 1 (SOS1) are a set of variables, at most one of which can take a non-zero value, all others being at 0. They most frequently applications is in a a set of variables that are actually binary variables: in other words, we have to choose at most one from a set of possibilities.
    • Special Ordered Sets of type 2 (SOS2) are an ordered set of non-negative variables, of which at most two can be non-zero, and if two are non-zero these must be consecutive in their ordering. Special Ordered Sets of type 2 are typically used to model non-linear functions of a variable in a linear model, such as non-convex quadratic functions using PWL functions.

    Standard representation of PWL costs

    Piecewise-linear costs are defined by a sequence of points representing the line segments for each generator: $(P_k^\text{max}, C_k)$ on which we assume $C_k$ is the cost of generating $P_k^\text{max}$ power, and $k \in \{1,\dots, K\}$ are the number of segments each generator cost function has.

    Note

    PowerSystems has more options to specify cost functions for each thermal unit. Independent of which form of the cost data is provided, PowerSimulations.jl will internally transform the data to use the λ-model formulation. See TODO: ADD PSY COST DOCS for more information.

    Commitment formulation

    With this the standard representation of PWL costs for a thermal unit commitment is given by:

    \[\begin{align*} + \min_{\substack{p_{t}, \delta_{k,t}}} + & \sum_{t \in \mathcal{T}} \left(\sum_{k \in \mathcal{K}} C_{k,t} \delta_{k,t} \right) \Delta t\\ + & \sum_{k \in \mathcal{K}} P_{k}^{\text{max}} \delta_{k,t} = p_{t} & \forall t \in \mathcal{T}\\ + & \sum_{k \in \mathcal{K}} \delta_{k,t} = u_{t} & \forall t \in \mathcal{T}\\ + & P^{\text{min}} u_{t} \leq p_{t} \leq P^{\text{max}} u_{t} & \forall t \in \mathcal{T}\\ + &\left \{\delta_{1,t}, \dots, \delta_{K,t} \right \} \in \text{SOS}_{2} & \forall t \in \mathcal{T} +\end{align*}\]

    on which $\delta_{k,t} \in [0,1]$ is the interpolation variable, $p$ is the active power of the generator and $u \in \{0,1\}$ is the commitment variable of the generator. In the case of a PWL convex costs, i.e. increasing slopes, the SOS constraint is omitted.

    Dispatch formulation

    \[\begin{align*} + \min_{\substack{p_{t}, \delta_{k,t}}} + & \sum_{t \in \mathcal{T}} \left(\sum_{k \in \mathcal{K}} C_{k,t} \delta_{k,t} \right) \Delta t\\ + & \sum_{k \in \mathcal{K}} P_{k}^{\text{max}} \delta_{k,t} = p_{t} & \forall t \in \mathcal{T}\\ + & \sum_{k \in \mathcal{K}} \delta_{k,t} = \text{on}_{t} & \forall t \in \mathcal{T}\\ + & P^{\text{min}} \text{on}_{t} \leq p_{t} \leq P^{\text{max}} \text{on}_{t} & \forall t \in \mathcal{T}\\ + &\left \{\delta_{i,t}, \dots, \delta_{k,t} \right \} \in \text{SOS}_{2} & \forall t \in \mathcal{T} +\end{align*}\]

    on which $\delta_{k,t} \in [0,1]$ is the interpolation variable, $p$ is the active power of the generator and $\text{on} \in \{0,1\}$ is the parameter that decides if the generator is available or not. In the case of a PWL convex costs, i.e. increasing slopes, the SOS constraint is omitted.

    Compact representation of PWL costs

    Commitment Formulation

    \[\begin{align*} + \min_{\substack{p_{t}, \delta_{k,t}}} + & \sum_{t \in \mathcal{T}} \left(\sum_{k \in \mathcal{K}} C_{k,t} \delta_{k,t} \right) \Delta t\\ + & \sum_{k \in \mathcal{K}} P_{k}^{\text{max}} \delta_{k,t} = P^{\text{min}} u_{t} + \Delta p_{t} & \forall t \in \mathcal{T}\\ + & \sum_{k \in \mathcal{K}} \delta_{k,t} = u_{t} & \forall t \in \mathcal{T}\\ + & 0 \leq \Delta p_{t} \leq \left( P^{\text{max}} - P^{\text{min}} \right)u_{t} & \forall t \in \mathcal{T}\\ + &\left \{\delta_{i,t} \dots \delta_{k,t} \right \} \in \text{SOS}_{2} & \forall t \in \mathcal{T} +\end{align*}\]

    on which $\delta_{k,t} \in [0,1]$ is the interpolation variable, $\Delta p$ is the active power of the generator above the minimum power and $u \in \{0,1\}$ is the commitment variable of the generator. In the case of a PWL convex costs, i.e. increasing slopes, the SOS constraint is omitted.

    Dispatch formulation

    \[\begin{align*} + \min_{\substack{p_{t}, \delta_{k,t}}} + & \sum_{t \in \mathcal{T}} \left(\sum_{k \in \mathcal{K}} C_{k,t} \delta_{k,t} \right) \Delta t\\ + & \sum_{k \in \mathcal{K}} P_{k}^{\text{max}} \delta_{k,t} = P^{\text{min}} \text{on}_{t} + \Delta p_{t} & \forall t \in \mathcal{T}\\ + & \sum_{k \in \mathcal{K}} \delta_{k,t} = \text{on}_{t} & \forall t \in \mathcal{T}\\ + & 0 \leq \Delta p_{t} \leq \left( P^{\text{max}} - P^{\text{min}} \right)\text{on}_{t} & \forall t \in \mathcal{T}\\ + &\left \{\delta_{i,t} \dots \delta_{k,t} \right \} \in \text{SOS}_{2} & \forall t \in \mathcal{T} +\end{align*}\]

    on which $\delta_{k,t} \in [0,1]$ is the interpolation variable, $\Delta p$ is the active power of the generator above the minimum power and $u \in \{0,1\}$ is the commitment variable of the generator. In the case of a PWL convex costs, i.e. increasing slopes, the SOS constraint is omitted.

    diff --git a/v0.28.3/formulation_library/README/index.html b/v0.28.3/formulation_library/README/index.html new file mode 100644 index 0000000000..40a30109f8 --- /dev/null +++ b/v0.28.3/formulation_library/README/index.html @@ -0,0 +1,2 @@ + +Formulation documentation guide · PowerSimulations.jl

    Formulation documentation guide

    Formulation documentation should roughly follow the template established by RenewableGen.md

    Auto generated items

    • Valid DeviceModel table: just change the device category in the filter function
    • Time Series Parameters: just change the device category and formulation in the get_default_time_series_names method call

    Linked items

    • Formulations in the Valid DeviceModel table must have a docstring in src/core/formulations.jl
    • The Formulation in the @docs block must have a docstring in src/core/formulations.jl
    • The Variables must have docstrings in src/core/variables.jl
    • The Time Series Parameters must have docstrings in src/core/parameters.jl
    diff --git a/v0.28.3/formulation_library/RenewableGen/index.html b/v0.28.3/formulation_library/RenewableGen/index.html new file mode 100644 index 0000000000..ef3b27a977 --- /dev/null +++ b/v0.28.3/formulation_library/RenewableGen/index.html @@ -0,0 +1,8 @@ + +Renewable Generation · PowerSimulations.jl

    PowerSystems.RenewableGen Formulations

    Renewable generation formulations define the optimization models that describe renewable units mathematical model in different operational settings, such as economic dispatch and unit commitment.

    Note

    The use of reactive power variables and constraints will depend on the network model used, i.e., whether it uses (or does not use) reactive power. If the network model is purely active power-based, reactive power variables and related constraints are not created.

    Note

    Reserve variables for services are not included in the formulation, albeit their inclusion change the variables, expressions, constraints and objective functions created. A detailed description of the implications in the optimization models is described in the Service formulation section.

    Table of contents

    1. RenewableFullDispatch
    2. RenewableConstantPowerFactor
    3. Valid configurations

    RenewableFullDispatch

    Variables:

    Static Parameters:

    • $P^\text{re,min}$ = PowerSystems.get_active_power_limits(device).min
    • $Q^\text{re,min}$ = PowerSystems.get_reactive_power_limits(device).min
    • $Q^\text{re,max}$ = PowerSystems.get_reactive_power_limits(device).max

    Time Series Parameters:

    Uses the max_active_power timeseries parameter to limit the available active power at each time-step.

    ParameterDefault Time Series Name
    ReactivePowerTimeSeriesParametermax_active_power
    ActivePowerTimeSeriesParametermax_active_power

    Objective:

    Creates an objective function term based on the FunctionData Options where the quantity term is defined as $- p^\text{re}$ to incentivize generation from RenewableGen devices.

    Expressions:

    Adds $p^\text{re}$ and $q^\text{re}$ terms to the respective active and reactive power balance expressions created by the selected Network Formulations.

    Constraints:

    \[\begin{aligned} +& P^\text{re,min} \le p_t^\text{re} \le \text{ActivePowerTimeSeriesParameter}_t, \quad \forall t \in \{1,\dots, T\} \\ +& Q^\text{re,min} \le q_t^\text{re} \le Q^\text{re,max}, \quad \forall t \in \{1,\dots, T\} +\end{aligned}\]


    RenewableConstantPowerFactor

    Variables:

    • ActivePowerVariable:
      • Bounds: [0.0, ]
      • Default initial value: PowerSystems.get_active_power(device)
      • Symbol: $p^\text{re}$
    • ReactivePowerVariable:
      • Bounds: [0.0, ]
      • Default initial value: PowerSystems.get_reactive_power(device)
      • Symbol: $q^\text{re}$

    Static Parameters:

    • $P^\text{re,min}$ = PowerSystems.get_active_power_limits(device).min
    • $Q^\text{re,min}$ = PowerSystems.get_reactive_power_limits(device).min
    • $Q^\text{re,max}$ = PowerSystems.get_reactive_power_limits(device).max
    • $\text{pf}$ = PowerSystems.get_power_factor(device)

    Time Series Parameters:

    ParameterDefault Time Series Name
    ReactivePowerTimeSeriesParametermax_active_power
    ActivePowerTimeSeriesParametermax_active_power

    Objective:

    Creates an objective function term based on the FunctionData Options where the quantity term is defined as $- p_t^\text{re}$ to incentivize generation from RenewableGen devices.

    Expressions:

    Adds $p^\text{re}$ and $q^\text{re}$ terms to the respective active and reactive power balance expressions created by the selected Network Formulations

    Constraints:

    \[\begin{aligned} +& P^\text{re,min} \le p_t^\text{re} \le \text{ActivePowerTimeSeriesParameter}_t, \quad \forall t \in \{1,\dots, T\} \\ +& q_t^\text{re} = \text{pf} \cdot p_t^\text{re}, \quad \forall t \in \{1,\dots, T\} +\end{aligned}\]


    Valid configurations

    Valid DeviceModels for subtypes of RenewableGen include the following:

    Valid DeviceModelDevice TypeFormulation
    DeviceModel(RenewableDispatch, FixedOutput)RenewableDispatchFixedOutput
    DeviceModel(RenewableNonDispatch, FixedOutput)RenewableNonDispatchFixedOutput
    DeviceModel(RenewableDispatch, RenewableConstantPowerFactor)RenewableDispatchRenewableConstantPowerFactor
    DeviceModel(RenewableNonDispatch, RenewableConstantPowerFactor)RenewableNonDispatchRenewableConstantPowerFactor
    DeviceModel(RenewableDispatch, RenewableFullDispatch)RenewableDispatchRenewableFullDispatch
    DeviceModel(RenewableNonDispatch, RenewableFullDispatch)RenewableNonDispatchRenewableFullDispatch
    diff --git a/v0.28.3/formulation_library/Service/index.html b/v0.28.3/formulation_library/Service/index.html new file mode 100644 index 0000000000..8643a9658a --- /dev/null +++ b/v0.28.3/formulation_library/Service/index.html @@ -0,0 +1,18 @@ + +Services · PowerSimulations.jl

    PowerSystems.Service Formulations

    Services (or ancillary services) are models used to ensure that there is necessary support to the power grid from generators to consumers, in order to ensure reliable operation of the system.

    The most common application for ancillary services are reserves, i.e., generation (or load) that is not currently being used, but can be quickly made available in case of unexpected changes of grid conditions, for example a sudden loss of load or generation.

    A key challenge of adding services to a system, from a mathematical perspective, is specifying which units contribute to the specified requirement of a service, that implies the creation of new variables (such as reserve variables) and modification of constraints.

    In this documentation, we first specify the available Services in the grid, and what requirements impose in the system, and later we discuss the implication on device formulations for specific units.

    Table of contents

    1. RangeReserve
    2. StepwiseCostReserve
    3. GroupReserve
    4. RampReserve
    5. NonSpinningReserve
    6. ConstantMaxInterfaceFlow
    7. Changes on Expressions

    RangeReserve

    For each service $s$ of the model type RangeReserve the following variables are created:

    Variables:

    • ActivePowerReserveVariable:
      • Bounds: [0.0, ]
      • Default proportional cost: $1.0 / \text{SystemBasePower}$
      • Symbol: $r_{d}$ for $d$ in contributing devices to the service $s$

    If slacks are enabled:

    Depending on the PowerSystems.jl type associated to the RangeReserve formulation model, the parameters are:

    Static Parameters

    • $\text{PF}$ = PowerSystems.get_max_participation_factor(service)

    For a ConstantReserve PowerSystems type:

    • $\text{Req}$ = PowerSystems.get_requirement(service)

    Time Series Parameters

    For a VariableReserve PowerSystems type:

    ParameterDefault Time Series Name
    RequirementTimeSeriesParameterrequirement

    Relevant Methods:

    • $\mathcal{D}_s$ = PowerSystems.get_contributing_devices(system, service): Set (vector) of all contributing devices to the service $s$ in the system.

    Objective:

    Add a large proportional cost to the objective function if slack variables are used $+ r^\text{sl} \cdot 10^5$. In addition adds the default cost for ActivePowerReserveVariables as a proportional cost.

    Expressions:

    Adds the ActivePowerReserveVariable for upper/lower bound expressions of contributing devices.

    For ReserveUp types, the variable is added to ActivePowerRangeExpressionUB, such that this expression considers both the ActivePowerVariable and its reserve variable. Similarly, For ReserveDown types, the variable is added to ActivePowerRangeExpressionLB, such that this expression considers both the ActivePowerVariable and its reserve variable

    Example: for a thermal unit $d$ contributing to two different ReserveUp $s_1, s_2$ services (e.g. Reg-Up and Spin):

    \[\text{ActivePowerRangeExpressionUB}_{t} = p_t^\text{th} + r_{s_1,t} + r_{s_2, t} \le P^\text{th,max}\]

    similarly if $s_3$ is a ReserveDown service (e.g. Reg-Down):

    \[\text{ActivePowerRangeExpressionLB}_{t} = p_t^\text{th} - r_{s_3,t} \ge P^\text{th,min}\]

    Constraints:

    A RangeReserve implements two fundamental constraints. The first is that the sum of all reserves of contributing devices must be larger than the RangeReserve requirement. Thus, for a service $s$:

    \[\sum_{d\in\mathcal{D}_s} r_{d,t} + r_t^\text{sl} \ge \text{Req},\quad \forall t\in \{1,\dots, T\} \quad \text{(for a ConstantReserve)} \\ +\sum_{d\in\mathcal{D}_s} r_{d,t} + r_t^\text{sl} \ge \text{RequirementTimeSeriesParameter}_{t},\quad \forall t\in \{1,\dots, T\} \quad \text{(for a VariableReserve)}\]

    In addition, there is a restriction on how much each contributing device $d$ can contribute to the requirement, based on the max participation factor allowed.

    \[r_{d,t} \le \text{Req} \cdot \text{PF} ,\quad \forall d\in \mathcal{D}_s, \forall t\in \{1,\dots, T\} \quad \text{(for a ConstantReserve)} \\ +r_{d,t} \le \text{RequirementTimeSeriesParameter}_{t} \cdot \text{PF}\quad \forall d\in \mathcal{D}_s, \forall t\in \{1,\dots, T\}, \quad \text{(for a VariableReserve)}\]


    StepwiseCostReserve

    Service must be used with ReserveDemandCurve PowerSystems.jl type. This service model is used to model ORDC (Operating Reserve Demand Curve) in ERCOT.

    For each service $s$ of the model type ReserveDemandCurve the following variables are created:

    Variables:

    Time Series Parameters

    For a ReserveDemandCurve PowerSystems type:

    | Parameter | Default Time Series Name |

    Relevant Methods:

    • $\mathcal{D}_s$ = PowerSystems.get_contributing_devices(system, service): Set (vector) of all contributing devices to the service $s$ in the system.

    Objective:

    The ServiceRequirementVariable is added as a piecewise linear cost based on the decreasing offers listed in the variable_cost time series. These decreasing cost represent the scarcity prices of not having sufficient reserves. For example, if the variable $\text{req} = 0$, then a really high cost is paid for not having enough reserves, and if $\text{req}$ is larger, then a lower cost (or even zero) is paid.

    Expressions:

    Adds the ActivePowerReserveVariable for upper/lower bound expressions of contributing devices.

    For ReserveUp types, the variable is added to ActivePowerRangeExpressionUB, such that this expression considers both the ActivePowerVariable and its reserve variable. Similarly, For ReserveDown types, the variable is added to ActivePowerRangeExpressionLB, such that this expression considers both the ActivePowerVariable and its reserve variable

    Example: for a thermal unit $d$ contributing to two different ReserveUp $s_1, s_2$ services (e.g. Reg-Up and Spin):

    \[\text{ActivePowerRangeExpressionUB}_{t} = p_t^\text{th} + r_{s_1,t} + r_{s_2, t} \le P^\text{th,max}\]

    similarly if $s_3$ is a ReserveDown service (e.g. Reg-Down):

    \[\text{ActivePowerRangeExpressionLB}_{t} = p_t^\text{th} - r_{s_3,t} \ge P^\text{th,min}\]

    Constraints:

    A StepwiseCostReserve implements a single constraint, such that the sum of all reserves of contributing devices must be larger than the ServiceRequirementVariable variable. Thus, for a service $s$:

    \[\sum_{d\in\mathcal{D}_s} r_{d,t} \ge \text{req}_t,\quad \forall t\in \{1,\dots, T\} \]

    GroupReserve

    Service must be used with ConstantReserveGroup PowerSystems.jl type. This service model is used to model an aggregation of services.

    For each service $s$ of the model type GroupReserve the following variables are created:

    Variables:

    No variables are created, but the services associated with the GroupReserve must have created variables.

    Static Parameters

    • $\text{Req}$ = PowerSystems.get_requirement(service)

    Relevant Methods:

    • $\mathcal{S}_s$ = PowerSystems.get_contributing_services(system, service): Set (vector) of all contributing services to the group service $s$ in the system.
    • $\mathcal{D}_{s_i}$ = PowerSystems.get_contributing_devices(system, service_aux): Set (vector) of all contributing devices to the service $s_i$ in the system.

    Objective:

    Does not modify the objective function, besides the changes to the objective function due to the other services associated to the group service.

    Expressions:

    No changes, besides the changes to the expressions due to the other services associated to the group service.

    Constraints:

    A GroupReserve implements that the sum of all reserves of contributing devices, of all contributing services, must be larger than the GroupReserve requirement. Thus, for a GroupReserve service $s$:

    \[\sum_{d\in\mathcal{D}_{s_i}} \sum_{i \in \mathcal{S}_s} r_{d,t} \ge \text{Req},\quad \forall t\in \{1,\dots, T\} \]


    RampReserve

    For each service $s$ of the model type RampReserve the following variables are created:

    Variables:

    • ActivePowerReserveVariable:
      • Bounds: [0.0, ]
      • Default proportional cost: $1.0 / \text{SystemBasePower}$
      • Symbol: $r_{d}$ for $d$ in contributing devices to the service $s$

    If slacks are enabled:

    RampReserve only accepts VariableReserve PowerSystems.jl type. With that, the parameters are:

    Static Parameters

    • $\text{TF}$ = PowerSystems.get_time_frame(service)
    • $R^\text{th,up}$ = PowerSystems.get_ramp_limits(device).up for thermal contributing devices
    • $R^\text{th,dn}$ = PowerSystems.get_ramp_limits(device).down for thermal contributing devices

    Time Series Parameters

    For a VariableReserve PowerSystems type:

    ParameterDefault Time Series Name
    RequirementTimeSeriesParameterrequirement

    Relevant Methods:

    • $\mathcal{D}_s$ = PowerSystems.get_contributing_devices(system, service): Set (vector) of all contributing devices to the service $s$ in the system.

    Objective:

    Add a large proportional cost to the objective function if slack variables are used $+ r^\text{sl} \cdot 10^5$. In addition adds the default cost for ActivePowerReserveVariables as a proportional cost.

    Expressions:

    Adds the ActivePowerReserveVariable for upper/lower bound expressions of contributing devices.

    For ReserveUp types, the variable is added to ActivePowerRangeExpressionUB, such that this expression considers both the ActivePowerVariable and its reserve variable. Similarly, For ReserveDown types, the variable is added to ActivePowerRangeExpressionLB, such that this expression considers both the ActivePowerVariable and its reserve variable

    Example: for a thermal unit $d$ contributing to two different ReserveUp $s_1, s_2$ services (e.g. Reg-Up and Spin):

    \[\text{ActivePowerRangeExpressionUB}_{t} = p_t^\text{th} + r_{s_1,t} + r_{s_2, t} \le P^\text{th,max}\]

    similarly if $s_3$ is a ReserveDown service (e.g. Reg-Down):

    \[\text{ActivePowerRangeExpressionLB}_{t} = p_t^\text{th} - r_{s_3,t} \ge P^\text{th,min}\]

    Constraints:

    A RampReserve implements three fundamental constraints. The first is that the sum of all reserves of contributing devices must be larger than the RampReserve requirement. Thus, for a service $s$:

    \[\sum_{d\in\mathcal{D}_s} r_{d,t} + r_t^\text{sl} \ge \text{RequirementTimeSeriesParameter}_{t},\quad \forall t\in \{1,\dots, T\}\]

    Finally, there is a restriction based on the ramp limits of the contributing devices:

    \[r_{d,t} \le R^\text{th,up} \cdot \text{TF}\quad \forall d\in \mathcal{D}_s, \forall t\in \{1,\dots, T\}, \quad \text{(for ReserveUp)} \\ +r_{d,t} \le R^\text{th,dn} \cdot \text{TF}\quad \forall d\in \mathcal{D}_s, \forall t\in \{1,\dots, T\}, \quad \text{(for ReserveDown)}\]


    NonSpinningReserve

    For each service $s$ of the model type NonSpinningReserve, the following variables are created:

    Variables:

    • ActivePowerReserveVariable:
      • Bounds: [0.0, ]
      • Default proportional cost: $1.0 / \text{SystemBasePower}$
      • Symbol: $r_{d}$ for $d$ in contributing devices to the service $s$

    If slacks are enabled:

    NonSpinningReserve only accepts VariableReserve PowerSystems.jl type. With that, the parameters are:

    Static Parameters

    • $\text{PF}$ = PowerSystems.get_max_participation_factor(service)
    • $\text{TF}$ = PowerSystems.get_time_frame(service)
    • $P^\text{th,min}$ = PowerSystems.get_active_power_limits(device).min for thermal contributing devices
    • $T^\text{st,up}$ = PowerSystems.get_time_limits(d).up for thermal contributing devices
    • $R^\text{th,up}$ = PowerSystems.get_ramp_limits(device).down for thermal contributing devices

    Other parameters:

    • $\Delta T$: Resolution of the problem in minutes.

    Time Series Parameters

    For a VariableReserve PowerSystems type:

    | Parameter | Default Time Series Name |

    Relevant Methods:

    • $\mathcal{D}_s$ = PowerSystems.get_contributing_devices(system, service): Set (vector) of all contributing devices to the service $s$ in the system.

    Objective:

    Add a large proportional cost to the objective function if slack variables are used $+ r^\text{sl} \cdot 10^5$. In addition adds the default cost for ActivePowerReserveVariables as a proportional cost.

    Expressions:

    Adds the ActivePowerReserveVariable for upper/lower bound expressions of contributing devices.

    For ReserveUp types, the variable is added to ActivePowerRangeExpressionUB, such that this expression considers both the ActivePowerVariable and its reserve variable. Similarly, For ReserveDown types, the variable is added to ActivePowerRangeExpressionLB, such that this expression considers both the ActivePowerVariable and its reserve variable

    Example: for a thermal unit $d$ contributing to two different ReserveUp $s_1, s_2$ services (e.g. Reg-Up and Spin):

    \[\text{ActivePowerRangeExpressionUB}_{t} = p_t^\text{th} + r_{s_1,t} + r_{s_2, t} \le P^\text{th,max}\]

    similarly if $s_3$ is a ReserveDown service (e.g. Reg-Down):

    \[\text{ActivePowerRangeExpressionLB}_{t} = p_t^\text{th} - r_{s_3,t} \ge P^\text{th,min}\]

    Constraints:

    A NonSpinningReserve implements three fundamental constraints. The first is that the sum of all reserves of contributing devices must be larger than the NonSpinningReserve requirement. Thus, for a service $s$:

    \[\sum_{d\in\mathcal{D}_s} r_{d,t} + r_t^\text{sl} \ge \text{RequirementTimeSeriesParameter}_{t},\quad \forall t\in \{1,\dots, T\}\]

    In addition, there is a restriction on how much each contributing device $d$ can contribute to the requirement, based on the max participation factor allowed.

    \[r_{d,t} \le \text{RequirementTimeSeriesParameter}_{t} \cdot \text{PF}\quad \forall d\in \mathcal{D}_s, \forall t\in \{1,\dots, T\},\]

    Finally, there is a restriction based on the reserve response time for the non-spinning reserve if the unit is off. To do so, compute $R^\text{limit}_d$ as the reserve response limit as:

    \[R^\text{limit}_d = \begin{cases} +0 & \text{ if TF } \le T^\text{st,up}_d \\ +P^\text{th,min}_d + (\text{TF}_s - T^\text{st,up}_d) \cdot R^\text{th,up}_d \Delta T \cdot R^\text{th,up}_d & \text{ if TF } > T^\text{st,up}_d +\end{cases}, \quad \forall d\in \mathcal{D}_s\]

    Then, the constraint depends on the commitment variable $u_t^\text{th}$ as:

    \[r_{d,t} \le (1 - u_{d,t}^\text{th}) \cdot R^\text{limit}_d, \quad \forall d \in \mathcal{D}_s, \forall t \in \{1,\dots, T\}\]


    ConstantMaxInterfaceFlow

    This Service model only accepts the PowerSystems.jl TransmissionInterface type to properly function. It is used to model a collection of branches that make up an interface or corridor with a maximum transfer of power.

    Variables

    If slacks are used:

    Static Parameters

    • $F^\text{max}$ = PowerSystems.get_active_power_flow_limits(service).max
    • $F^\text{min}$ = PowerSystems.get_active_power_flow_limits(service).min
    • $C^\text{flow}$ = PowerSystems.get_violation_penalty(service)
    • $\mathcal{M}_s$ = PowerSystems.get_direction_mapping(service). Dictionary of contributing branches with its specified direction ($\text{Dir}_d = 1$ or $\text{Dir}_d = -1$) with respect to the interface.

    Relevant Methods

    • $\mathcal{D}_s$ = PowerSystems.get_contributing_devices(system, service): Set (vector) of all contributing branches to the service $s$ in the system.

    Objective:

    Add the violation penalty proportional cost to the objective function if slack variables are used $+ (f^\text{sl,up} + f^\text{sl,dn}) \cdot C^\text{flow}$.

    Expressions:

    Creates the expression InterfaceTotalFlow to keep track of all FlowActivePowerVariable of contributing branches to the transmission interface.

    Constraints:

    It adds the constraint to limit the InterfaceTotalFlow by the specified bounds of the service $s$:

    \[F^\text{min} \le f^\text{sl,up}_t - f^\text{sl,dn}_t + \sum_{d\in\mathcal{D}_s} \text{Dir}_d f_{d,t} \le F^\text{max}, \quad \forall t \in \{1,\dots,T\}\]

    Changes on Expressions due to Service models

    It is important to note that by adding a service to a Optimization Problem, variables for each contributing device must be created. For example, for every contributing generator $d \in \mathcal{D}$ that is participating in services $s_1,s_2,s_3$, it is required to create three set of ActivePowerReserveVariable variables:

    \[r_{s_1,d,t},~ r_{s_2,d,t},~ r_{s_3,d,t},\quad \forall d \in \mathcal{D}, \forall t \in \{1,\dots, T\}\]

    Changes on UpperBound (UB) and LowerBound (LB) limits

    Each contributing generator $d$ has active power limits that the reserve variables affect. In simple terms, the limits are implemented using expressions ActivePowerRangeExpressionUB and ActivePowerRangeExpressionLB as:

    \[\text{ActivePowerRangeExpressionUB}_t \le P^\text{max} \\ +\text{ActivePowerRangeExpressionLB}_t \ge P^\text{min}\]

    ReserveUp type variables contribute to the upper bound expression, while ReserveDown variables contribute to the lower bound expressions. So if $s_1,s_2$ are ReserveUp services, and $s_3$ is a ReserveDown service, then for a thermal generator $d$ using a ThermalStandardDispatch:

    \[\begin{align*} +& p_{d,t}^\text{th} + r_{s_1,d,t} + r_{s_2,d,t} \le P^\text{th,max},\quad \forall d\in \mathcal{D}^\text{th}, \forall t \in \{1,\dots,T\} \\ +& p_{d,t}^\text{th} - r_{s_3,d,t} \ge P^\text{th,min},\quad \forall d\in \mathcal{D}^\text{th}, \forall t \in \{1,\dots,T\} +\end{align*}\]

    while for a renewable generator $d$ using a RenewableFullDispatch:

    \[\begin{align*} +& p_{d,t}^\text{re} + r_{s_1,d,t} + r_{s_2,d,t} \le \text{ActivePowerTimeSeriesParameter}_t,\quad \forall d\in \mathcal{D}^\text{re}, \forall t \in \{1,\dots,T\}\\ +& p_{d,t}^\text{re} - r_{s_3,d,t} \ge 0,\quad \forall d\in \mathcal{D}^\text{re}, \forall t \in \{1,\dots,T\} +\end{align*}\]

    Changes in Ramp limits

    For the case of Ramp Limits (of formulation that model these limits), the reserve variables only affect the current time, and not the previous time. Then, for the same example as before:

    \[\begin{align*} +& p_{d,t}^\text{th} + r_{s_1,d,t} + r_{s_2,d,t} - p_{d,t-1}^\text{th}\le R^\text{th,up},\quad \forall d\in \mathcal{D}^\text{th}, \forall t \in \{1,\dots,T\}\\ +& p_{d,t}^\text{th} - r_{s_3,d,t} - p_{d,t-1}^\text{th} \ge -R^\text{th,dn},\quad \forall d\in \mathcal{D}^\text{th}, \forall t \in \{1,\dots,T\} +\end{align*}\]

    diff --git a/v0.28.3/formulation_library/ThermalGen/index.html b/v0.28.3/formulation_library/ThermalGen/index.html new file mode 100644 index 0000000000..aef85760f0 --- /dev/null +++ b/v0.28.3/formulation_library/ThermalGen/index.html @@ -0,0 +1,93 @@ + +Thermal Generation · PowerSimulations.jl

    ThermalGen Formulations

    Thermal generation formulations define the optimization models that describe thermal units mathematical model in different operational settings, such as economic dispatch and unit commitment.

    Note

    Thermal units can include multiple terms added to the objective function, such as no-load cost, turn-on/off cost, fixed cost and variable cost. In addition, variable costs can be linear, quadratic or piecewise-linear formulations. These methods are properly described in the cost function page.

    Note

    The use of reactive power variables and constraints will depend on the network model used, i.e., whether it uses (or does not use) reactive power. If the network model is purely active power-based, reactive power variables and related constraints are not created.

    Note

    Reserve variables for services are not included in the formulation, albeit their inclusion change the variables, expressions, constraints and objective functions created. A detailed description of the implications in the optimization models is described in the Service formulation section.

    Table of Contents

    1. ThermalBasicDispatch
    2. ThermalDispatchNoMin
    3. ThermalCompactDispatch
    4. ThermalStandardDispatch
    5. ThermalBasicUnitCommitment
    6. ThermalBasicCompactUnitCommitment
    7. ThermalStandardUnitCommitment
    8. ThermalMultiStartUnitCommitment
    9. Valid configurations

    ThermalBasicDispatch

    Variables:

    Static Parameters:

    • $P^\text{th,min}$ = PowerSystems.get_active_power_limits(device).min
    • $P^\text{th,max}$ = PowerSystems.get_active_power_limits(device).max
    • $Q^\text{th,min}$ = PowerSystems.get_reactive_power_limits(device).min
    • $Q^\text{th,max}$ = PowerSystems.get_reactive_power_limits(device).max

    Objective:

    Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.

    Expressions:

    Adds $p^\text{th}$ to the ActivePowerBalance expression and $q^\text{th}$ to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.

    Constraints:

    For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters.

    \[\begin{align*} +& P^\text{th,min} \le p^\text{th}_t \le P^\text{th,max}, \quad \forall t\in \{1, \dots, T\} \\ +& Q^\text{th,min} \le q^\text{th}_t \le Q^\text{th,max}, \quad \forall t\in \{1, \dots, T\} +\end{align*}\]


    ThermalDispatchNoMin

    Variables:

    Static Parameters:

    • $P^\text{th,max}$ = PowerSystems.get_active_power_limits(device).max
    • $Q^\text{th,min}$ = PowerSystems.get_reactive_power_limits(device).min
    • $Q^\text{th,max}$ = PowerSystems.get_reactive_power_limits(device).max

    Objective:

    Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.

    Expressions:

    Adds $p^\text{th}$ to the ActivePowerBalance expression and $q^\text{th}$ to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.

    Constraints:

    For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters.

    \[\begin{align} +& 0 \le p^\text{th}_t \le P^\text{th,max}, \quad \forall t\in \{1, \dots, T\} \\ +& Q^\text{th,min} \le q^\text{th}_t \le Q^\text{th,max}, \quad \forall t\in \{1, \dots, T\} +\end{align}\]


    ThermalCompactDispatch

    Variables:

    Auxiliary Variables:

    • PowerOutput:
      • Symbol: $P^\text{th}$
      • Definition: $P^\text{th} = \text{on}^\text{th}P^\text{min} + \Delta p^\text{th}$

    Static Parameters:

    • $P^\text{th,min}$ = PowerSystems.get_active_power_limits(device).min
    • $P^\text{th,max}$ = PowerSystems.get_active_power_limits(device).max
    • $Q^\text{th,min}$ = PowerSystems.get_reactive_power_limits(device).min
    • $Q^\text{th,max}$ = PowerSystems.get_reactive_power_limits(device).max
    • $R^\text{th,up}$ = PowerSystems.get_ramp_limits(device).up
    • $R^\text{th,dn}$ = PowerSystems.get_ramp_limits(device).down

    Variable Value Parameters:

    • $\text{on}^\text{th}$: Used in feedforwards to define if the unit is on/off at each time-step from another problem. If no feedforward is used, the parameter takes a {0,1} value if the unit is available or not.

    Objective:

    Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.

    Expressions:

    Adds $\text{on}^\text{th}P^\text{th,min} + \Delta p^\text{th}$ to the ActivePowerBalance expression and $q^\text{th}$ to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.

    Constraints:

    For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters. It also implements ramp constraints for the active power variable.

    \[\begin{align*} +& 0 \le \Delta p^\text{th}_t \le \text{on}^\text{th}_t\left(P^\text{th,max} - P^\text{th,min}\right), \quad \forall t\in \{1, \dots, T\} \\ +& \text{on}^\text{th}_t Q^\text{th,min} \le q^\text{th}_t \le \text{on}^\text{th}_t Q^\text{th,max}, \quad \forall t\in \{1, \dots, T\} \\ +& -R^\text{th,dn} \le \Delta p_1^\text{th} - \Delta p^\text{th, init} \le R^\text{th,up} \\ +& -R^\text{th,dn} \le \Delta p_t^\text{th} - \Delta p_{t-1}^\text{th} \le R^\text{th,up}, \quad \forall t\in \{2, \dots, T\} +\end{align*}\]


    ThermalStandardDispatch

    Variables:

    Static Parameters:

    • $P^\text{th,min}$ = PowerSystems.get_active_power_limits(device).min
    • $P^\text{th,max}$ = PowerSystems.get_active_power_limits(device).max
    • $Q^\text{th,min}$ = PowerSystems.get_reactive_power_limits(device).min
    • $Q^\text{th,max}$ = PowerSystems.get_reactive_power_limits(device).max
    • $R^\text{th,up}$ = PowerSystems.get_ramp_limits(device).up
    • $R^\text{th,dn}$ = PowerSystems.get_ramp_limits(device).down

    Objective:

    Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.

    Expressions:

    Adds $p^\text{th}$ to the ActivePowerBalance expression and $q^\text{th}$ to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.

    Constraints:

    For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters.

    \[\begin{align*} +& P^\text{th,min} \le p^\text{th}_t \le P^\text{th,max}, \quad \forall t\in \{1, \dots, T\} \\ +& Q^\text{th,min} \le q^\text{th}_t \le Q^\text{th,max}, \quad \forall t\in \{1, \dots, T\} \\ +& -R^\text{th,dn} \le p_1^\text{th} - p^\text{th, init} \le R^\text{th,up} \\ +& -R^\text{th,dn} \le p_t^\text{th} - p_{t-1}^\text{th} \le R^\text{th,up}, \quad \forall t\in \{2, \dots, T\} +\end{align*}\]


    ThermalBasicUnitCommitment

    Variables:

    Static Parameters:

    • $P^\text{th,min}$ = PowerSystems.get_active_power_limits(device).min
    • $P^\text{th,max}$ = PowerSystems.get_active_power_limits(device).max
    • $Q^\text{th,min}$ = PowerSystems.get_reactive_power_limits(device).min
    • $Q^\text{th,max}$ = PowerSystems.get_reactive_power_limits(device).max

    Objective:

    Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.

    Expressions:

    Adds $p^\text{th}$ to the ActivePowerBalance expression and $q^\text{th}$ to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.

    Constraints:

    For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters. In addition, it creates the commitment constraint to turn on/off the device.

    \[\begin{align*} +& u_t^\text{th} P^\text{th,min} \le p^\text{th}_t \le u_t^\text{th} P^\text{th,max}, \quad \forall t\in \{1, \dots, T\} \\ +& u_t^\text{th} Q^\text{th,min} \le q^\text{th}_t \le u_t^\text{th} Q^\text{th,max}, \quad \forall t\in \{1, \dots, T\} \\ +& u_1^\text{th} = u^\text{th,init} + v_1^\text{th} - w_1^\text{th} \\ +& u_t^\text{th} = u_{t-1}^\text{th} + v_t^\text{th} - w_t^\text{th}, \quad \forall t \in \{2,\dots,T\} \\ +& v_t^\text{th} + w_t^\text{th} \le 1, \quad \forall t \in \{1,\dots,T\} +\end{align*}\]


    ThermalBasicCompactUnitCommitment

    Variables:

    Auxiliary Variables:

    • PowerOutput:
      • Symbol: $P^\text{th}$
      • Definition: $P^\text{th} = u^\text{th}P^\text{min} + \Delta p^\text{th}$

    Static Parameters:

    • $P^\text{th,min}$ = PowerSystems.get_active_power_limits(device).min
    • $P^\text{th,max}$ = PowerSystems.get_active_power_limits(device).max
    • $Q^\text{th,min}$ = PowerSystems.get_reactive_power_limits(device).min
    • $Q^\text{th,max}$ = PowerSystems.get_reactive_power_limits(device).max

    Objective:

    Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.

    Expressions:

    Adds $u^\text{th}P^\text{th,min} + \Delta p^\text{th}$ to the ActivePowerBalance expression and $q^\text{th}$ to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.

    Constraints:

    For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters. In addition, it creates the commitment constraint to turn on/off the device.

    \[\begin{align*} +& 0 \le \Delta p^\text{th}_t \le u^\text{th}_t\left(P^\text{th,max} - P^\text{th,min}\right), \quad \forall t\in \{1, \dots, T\} \\ +& u_t^\text{th} Q^\text{th,min} \le q^\text{th}_t \le u_t^\text{th} Q^\text{th,max}, \quad \forall t\in \{1, \dots, T\} \\ +& u_1^\text{th} = u^\text{th,init} + v_1^\text{th} - w_1^\text{th} \\ +& u_t^\text{th} = u_{t-1}^\text{th} + v_t^\text{th} - w_t^\text{th}, \quad \forall t \in \{2,\dots,T\} \\ +& v_t^\text{th} + w_t^\text{th} \le 1, \quad \forall t \in \{1,\dots,T\} +\end{align*}\]


    ThermalCompactUnitCommitment

    Variables:

    Auxiliary Variables:

    • PowerOutput:
      • Symbol: $P^\text{th}$
      • Definition: $P^\text{th} = u^\text{th}P^\text{min} + \Delta p^\text{th}$
    • TimeDurationOn:
      • Symbol: $V_t^\text{th}$
      • Definition: Computed post optimization by adding consecutive turned on variable $u_t^\text{th}$
    • TimeDurationOff:
      • Symbol: $W_t^\text{th}$
      • Definition: Computed post optimization by adding consecutive turned off variable $1 - u_t^\text{th}$

    Static Parameters:

    • $P^\text{th,min}$ = PowerSystems.get_active_power_limits(device).min
    • $P^\text{th,max}$ = PowerSystems.get_active_power_limits(device).max
    • $Q^\text{th,min}$ = PowerSystems.get_reactive_power_limits(device).min
    • $Q^\text{th,max}$ = PowerSystems.get_reactive_power_limits(device).max
    • $R^\text{th,up}$ = PowerSystems.get_ramp_limits(device).up
    • $R^\text{th,dn}$ = PowerSystems.get_ramp_limits(device).down
    • $D^\text{min,up}$ = PowerSystems.get_time_limits(device).up
    • $D^\text{min,dn}$ = PowerSystems.get_time_limits(device).down

    Objective:

    Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.

    Expressions:

    Adds $u^\text{th}P^\text{th,min} + \Delta p^\text{th}$ to the ActivePowerBalance expression and $q^\text{th}$ to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.

    Constraints:

    For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters. It also creates the commitment constraint to turn on/off the device.

    \[\begin{align*} +& 0 \le \Delta p^\text{th}_t \le u^\text{th}_t\left(P^\text{th,max} - P^\text{th,min}\right), \quad \forall t\in \{1, \dots, T\} \\ +& u_t^\text{th} Q^\text{th,min} \le q^\text{th}_t \le u_t^\text{th} Q^\text{th,max}, \quad \forall t\in \{1, \dots, T\} \\ +& -R^\text{th,dn} \le \Delta p_1^\text{th} - \Delta p^\text{th, init} \le R^\text{th,up} \\ +& -R^\text{th,dn} \le \Delta p_t^\text{th} - \Delta p_{t-1}^\text{th} \le R^\text{th,up}, \quad \forall t\in \{2, \dots, T\} \\ +& u_1^\text{th} = u^\text{th,init} + v_1^\text{th} - w_1^\text{th} \\ +& u_t^\text{th} = u_{t-1}^\text{th} + v_t^\text{th} - w_t^\text{th}, \quad \forall t \in \{2,\dots,T\} \\ +& v_t^\text{th} + w_t^\text{th} \le 1, \quad \forall t \in \{1,\dots,T\} +\end{align*}\]

    In addition, this formulation adds duration constraints, i.e. minimum-up time and minimum-down time constraints. The duration constraints are added over the start times looking backwards.

    The duration times $D^\text{min,up}$ and $D^\text{min,dn}$ are processed to be used in multiple of the time-steps, given the resolution of the specific problem. In addition, parameters $D^\text{init,up}$ and $D^\text{init,dn}$ are used to identify how long the unit was on or off, respectively, before the simulation started.

    Minimum up-time constraint for $t \in \{1,\dots T\}$:

    \[\begin{align*} +& \text{If } t \leq D^\text{min,up} - D^\text{init,up} \text{ and } D^\text{init,up} > 0: \\ +& 1 + \sum_{i=t-D^\text{min,up} + 1}^t v_i^\text{th} \leq u_t^\text{th} \quad \text{(for } i \text{ in the set of time steps).} \\ +& \text{Otherwise:} \\ +& \sum_{i=t-D^\text{min,up} + 1}^t v_i^\text{th} \leq u_t^\text{th} +\end{align*}\]

    Minimum down-time constraint for $t \in \{1,\dots T\}$:

    \[\begin{align*} +& \text{If } t \leq D^\text{min,dn} - D^\text{init,dn} \text{ and } D^\text{init,up} > 0: \\ +& 1 + \sum_{i=t-D^\text{min,dn} + 1}^t w_i^\text{th} \leq 1 - u_t^\text{th} \quad \text{(for } i \text{ in the set of time steps).} \\ +& \text{Otherwise:} \\ +& \sum_{i=t-D^\text{min,dn} + 1}^t w_i^\text{th} \leq 1 - u_t^\text{th} +\end{align*}\]


    ThermalStandardUnitCommitment

    Variables:

    Auxiliary Variables:

    • TimeDurationOn:
      • Symbol: $V_t^\text{th}$
      • Definition: Computed post optimization by adding consecutive turned on variable $u_t^\text{th}$
    • TimeDurationOff:
      • Symbol: $W_t^\text{th}$
      • Definition: Computed post optimization by adding consecutive turned off variable $1 - u_t^\text{th}$

    Static Parameters:

    • $P^\text{th,min}$ = PowerSystems.get_active_power_limits(device).min
    • $P^\text{th,max}$ = PowerSystems.get_active_power_limits(device).max
    • $Q^\text{th,min}$ = PowerSystems.get_reactive_power_limits(device).min
    • $Q^\text{th,max}$ = PowerSystems.get_reactive_power_limits(device).max
    • $R^\text{th,up}$ = PowerSystems.get_ramp_limits(device).up
    • $R^\text{th,dn}$ = PowerSystems.get_ramp_limits(device).down
    • $D^\text{min,up}$ = PowerSystems.get_time_limits(device).up
    • $D^\text{min,dn}$ = PowerSystems.get_time_limits(device).down

    Objective:

    Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.

    Expressions:

    Adds $p^\text{th}$ to the ActivePowerBalance expression and $q^\text{th}$ to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.

    Constraints:

    For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters. It also creates the commitment constraint to turn on/off the device.

    \[\begin{align*} +& u^\text{th}_t P^\text{th,min} \le p^\text{th}_t \le u^\text{th}_t P^\text{th,max}, \quad \forall t\in \{1, \dots, T\} \\ +& u_t^\text{th} Q^\text{th,min} \le q^\text{th}_t \le u_t^\text{th} Q^\text{th,max}, \quad \forall t\in \{1, \dots, T\} \\ +& -R^\text{th,dn} \le p_1^\text{th} - p^\text{th, init} \le R^\text{th,up} \\ +& -R^\text{th,dn} \le p_t^\text{th} - p_{t-1}^\text{th} \le R^\text{th,up}, \quad \forall t\in \{2, \dots, T\} \\ +& u_1^\text{th} = u^\text{th,init} + v_1^\text{th} - w_1^\text{th} \\ +& u_t^\text{th} = u_{t-1}^\text{th} + v_t^\text{th} - w_t^\text{th}, \quad \forall t \in \{2,\dots,T\} \\ +& v_t^\text{th} + w_t^\text{th} \le 1, \quad \forall t \in \{1,\dots,T\} +\end{align*}\]

    In addition, this formulation adds duration constraints, i.e. minimum-up time and minimum-down time constraints. The duration constraints are added over the start times looking backwards.

    The duration times $D^\text{min,up}$ and $D^\text{min,dn}$ are processed to be used in multiple of the time-steps, given the resolution of the specific problem. In addition, parameters $D^\text{init,up}$ and $D^\text{init,dn}$ are used to identify how long the unit was on or off, respectively, before the simulation started.

    Minimum up-time constraint for $t \in \{1,\dots T\}$:

    \[\begin{align*} +& \text{If } t \leq D^\text{min,up} - D^\text{init,up} \text{ and } D^\text{init,up} > 0: \\ +& 1 + \sum_{i=t-D^\text{min,up} + 1}^t v_i^\text{th} \leq u_t^\text{th} \quad \text{(for } i \text{ in the set of time steps).} \\ +& \text{Otherwise:} \\ +& \sum_{i=t-D^\text{min,up} + 1}^t v_i^\text{th} \leq u_t^\text{th} +\end{align*}\]

    Minimum down-time constraint for $t \in \{1,\dots T\}$:

    \[\begin{align*} +& \text{If } t \leq D^\text{min,dn} - D^\text{init,dn} \text{ and } D^\text{init,up} > 0: \\ +& 1 + \sum_{i=t-D^\text{min,dn} + 1}^t w_i^\text{th} \leq 1 - u_t^\text{th} \quad \text{(for } i \text{ in the set of time steps).} \\ +& \text{Otherwise:} \\ +& \sum_{i=t-D^\text{min,dn} + 1}^t w_i^\text{th} \leq 1 - u_t^\text{th} +\end{align*}\]


    ThermalMultiStartUnitCommitment

    Variables:

    Auxiliary Variables:

    • PowerOutput:
      • Symbol: $P^\text{th}$
      • Definition: $P^\text{th} = u^\text{th}P^\text{min} + \Delta p^\text{th}$
    • TimeDurationOn:
      • Symbol: $V_t^\text{th}$
      • Definition: Computed post optimization by adding consecutive turned on variable $u_t^\text{th}$
    • TimeDurationOff:
      • Symbol: $W_t^\text{th}$
      • Definition: Computed post optimization by adding consecutive turned off variable $1 - u_t^\text{th}$

    Static Parameters:

    • $P^\text{th,min}$ = PowerSystems.get_active_power_limits(device).min
    • $P^\text{th,max}$ = PowerSystems.get_active_power_limits(device).max
    • $Q^\text{th,min}$ = PowerSystems.get_reactive_power_limits(device).min
    • $Q^\text{th,max}$ = PowerSystems.get_reactive_power_limits(device).max
    • $R^\text{th,up}$ = PowerSystems.get_ramp_limits(device).up
    • $R^\text{th,dn}$ = PowerSystems.get_ramp_limits(device).down
    • $D^\text{min,up}$ = PowerSystems.get_time_limits(device).up
    • $D^\text{min,dn}$ = PowerSystems.get_time_limits(device).down
    • $D^\text{cold}$ = PowerSystems.get_start_time_limits(device).cold
    • $D^\text{warm}$ = PowerSystems.get_start_time_limits(device).warm
    • $D^\text{hot}$ = PowerSystems.get_start_time_limits(device).hot
    • $P^\text{th,startup}$ = PowerSystems.get_power_trajectory(device).startup
    • $P^\text{th, shdown}$ = PowerSystems.get_power_trajectory(device).shutdown

    Objective:

    Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.

    Expressions:

    Adds $u^\text{th}P^\text{th,min} + \Delta p^\text{th}$ to the ActivePowerBalance expression and $q^\text{th}$ to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.

    Constraints:

    For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters. It also creates the commitment constraint to turn on/off the device.

    \[\begin{align*} +& 0 \le \Delta p^\text{th}_t \le u^\text{th}_t\left(P^\text{th,max} - P^\text{th,min}\right), \quad \forall t\in \{1, \dots, T\} \\ +& u_t^\text{th} Q^\text{th,min} \le q^\text{th}_t \le u_t^\text{th} Q^\text{th,max}, \quad \forall t\in \{1, \dots, T\} \\ +& -R^\text{th,dn} \le \Delta p_1^\text{th} - \Delta p^\text{th, init} \le R^\text{th,up} \\ +& -R^\text{th,dn} \le \Delta p_t^\text{th} - \Delta p_{t-1}^\text{th} \le R^\text{th,up}, \quad \forall t\in \{2, \dots, T\} \\ +& u_1^\text{th} = u^\text{th,init} + v_1^\text{th} - w_1^\text{th} \\ +& u_t^\text{th} = u_{t-1}^\text{th} + v_t^\text{th} - w_t^\text{th}, \quad \forall t \in \{2,\dots,T\} \\ +& v_t^\text{th} + w_t^\text{th} \le 1, \quad \forall t \in \{1,\dots,T\} \\ +& \max\{P^\text{th,max} - P^\text{th,shdown}, 0\} \cdot w_1^\text{th} \le u^\text{th,init} (P^\text{th,max} - P^\text{th,min}) - P^\text{th,init} +\end{align*}\]

    In addition, this formulation adds duration constraints, i.e. minimum-up time and minimum-down time constraints. The duration constraints are added over the start times looking backwards.

    The duration times $D^\text{min,up}$ and $D^\text{min,dn}$ are processed to be used in multiple of the time-steps, given the resolution of the specific problem. In addition, parameters $D^\text{init,up}$ and $D^\text{init,dn}$ are used to identify how long the unit was on or off, respectively, before the simulation started.

    Minimum up-time constraint for $t \in \{1,\dots T\}$:

    \[\begin{align*} +& \text{If } t \leq D^\text{min,up} - D^\text{init,up} \text{ and } D^\text{init,up} > 0: \\ +& 1 + \sum_{i=t-D^\text{min,up} + 1}^t v_i^\text{th} \leq u_t^\text{th} \quad \text{(for } i \text{ in the set of time steps).} \\ +& \text{Otherwise:} \\ +& \sum_{i=t-D^\text{min,up} + 1}^t v_i^\text{th} \leq u_t^\text{th} +\end{align*}\]

    Minimum down-time constraint for $t \in \{1,\dots T\}$:

    \[\begin{align*} +& \text{If } t \leq D^\text{min,dn} - D^\text{init,dn} \text{ and } D^\text{init,up} > 0: \\ +& 1 + \sum_{i=t-D^\text{min,dn} + 1}^t w_i^\text{th} \leq 1 - u_t^\text{th} \quad \text{(for } i \text{ in the set of time steps).} \\ +& \text{Otherwise:} \\ +& \sum_{i=t-D^\text{min,dn} + 1}^t w_i^\text{th} \leq 1 - u_t^\text{th} +\end{align*}\]

    Finally, multi temperature start/stop constraints are implemented using the following constraints:

    \[\begin{align*} +& v_t^\text{th} = x_t^\text{th} + y_t^\text{th} + z_t^\text{th}, \quad \forall t \in \{1, \dots, T\} \\ +& z_t^\text{th} \le \sum_{i \in [D^\text{hot}, D^\text{warm})}w_{t-i}^\text{th}, \quad \forall t \in \{D^\text{warm}, \dots, T\} \\ +& y_t^\text{th} \le \sum_{i \in [D^\text{warm}, D^\text{cold})}w_{t-i}^\text{th}, \quad \forall t \in \{D^\text{cold}, \dots, T\} \\ +& (D^\text{warm} - 1) z_t^\text{th} + (1 - z_t^\text{th}) M^\text{big} \ge \sum_{i=1}^t (1 - u_i^\text{th}) + D^\text{init,hot}, \quad \forall t \in \{1, \dots, T\} \\ +& D^\text{hot} z_t^\text{th} \le \sum_{i=1}^t (1 - u_i^\text{th}) + D^\text{init,hot}, \quad \forall t \in \{1, \dots, T\} \\ +& (D^\text{cold} - 1) y_t^\text{th} + (1 - y_t^\text{th}) M^\text{big} \ge \sum_{i=1}^t (1 - u_i^\text{th}) + D^\text{init,warm}, \quad \forall t \in \{1, \dots, T\} \\ +& D^\text{warm} y_t^\text{th} \le \sum_{i=1}^t (1 - u_i^\text{th}) + D^\text{init,warm}, \quad \forall t \in \{1, \dots, T\} \\ +\end{align*}\]


    Valid configurations

    Valid DeviceModels for subtypes of ThermalGen include the following:

    Valid DeviceModelDevice TypeFormulation
    DeviceModel(ThermalMultiStart, FixedOutput)ThermalMultiStartFixedOutput
    DeviceModel(ThermalStandard, FixedOutput)ThermalStandardFixedOutput
    DeviceModel(ThermalMultiStart, ThermalBasicDispatch)ThermalMultiStartThermalBasicDispatch
    DeviceModel(ThermalStandard, ThermalBasicDispatch)ThermalStandardThermalBasicDispatch
    DeviceModel(ThermalMultiStart, ThermalCompactDispatch)ThermalMultiStartThermalCompactDispatch
    DeviceModel(ThermalStandard, ThermalCompactDispatch)ThermalStandardThermalCompactDispatch
    DeviceModel(ThermalMultiStart, ThermalDispatchNoMin)ThermalMultiStartThermalDispatchNoMin
    DeviceModel(ThermalStandard, ThermalDispatchNoMin)ThermalStandardThermalDispatchNoMin
    DeviceModel(ThermalMultiStart, ThermalStandardDispatch)ThermalMultiStartThermalStandardDispatch
    DeviceModel(ThermalStandard, ThermalStandardDispatch)ThermalStandardThermalStandardDispatch
    DeviceModel(ThermalMultiStart, ThermalBasicCompactUnitCommitment)ThermalMultiStartThermalBasicCompactUnitCommitment
    DeviceModel(ThermalStandard, ThermalBasicCompactUnitCommitment)ThermalStandardThermalBasicCompactUnitCommitment
    DeviceModel(ThermalMultiStart, ThermalCompactUnitCommitment)ThermalMultiStartThermalCompactUnitCommitment
    DeviceModel(ThermalStandard, ThermalCompactUnitCommitment)ThermalStandardThermalCompactUnitCommitment
    DeviceModel(ThermalMultiStart, ThermalMultiStartUnitCommitment)ThermalMultiStartThermalMultiStartUnitCommitment
    DeviceModel(ThermalMultiStart, ThermalBasicUnitCommitment)ThermalMultiStartThermalBasicUnitCommitment
    DeviceModel(ThermalStandard, ThermalBasicUnitCommitment)ThermalStandardThermalBasicUnitCommitment
    DeviceModel(ThermalMultiStart, ThermalStandardUnitCommitment)ThermalMultiStartThermalStandardUnitCommitment
    DeviceModel(ThermalStandard, ThermalStandardUnitCommitment)ThermalStandardThermalStandardUnitCommitment
    diff --git a/v0.28.3/get_test_data.jl b/v0.28.3/get_test_data.jl new file mode 100644 index 0000000000..a664aa53dc --- /dev/null +++ b/v0.28.3/get_test_data.jl @@ -0,0 +1,40 @@ +using Cbc +using PowerSimulations +using PowerSystems +using DataStructures +using InfrastructureSystems +const IS = InfrastructureSystems +const PSI = PowerSimulations +const PSY = PowerSystems + +include("../../../test/test_utils/get_test_data.jl") + +abstract type TestOpProblem <: PSI.DefaultDecisionProblem end + +system = build_c_sys5_re(; add_reserves = true) +solver = optimizer_with_attributes(Cbc.Optimizer) + +devices = Dict{Symbol, DeviceModel}( + :Generators => DeviceModel(ThermalStandard, ThermalBasicDispatch), + :Loads => DeviceModel(PowerLoad, StaticPowerLoad), +) +branches = Dict{Symbol, DeviceModel}( + :L => DeviceModel(Line, StaticLine), + :T => DeviceModel(Transformer2W, StaticBranch), + :TT => DeviceModel(TapTransformer, StaticBranch), +); +services = Dict{Symbol, ServiceModel}(); + +template = PSI.ProblemTemplate(CopperPlatePowerModel, devices, branches, services); + +operation_problem = PSI.DecisionModel(TestOpProblem, template, system; optimizer = solver); + +set_services_template!( + operation_problem, + Dict( + :Reserve => ServiceModel(VariableReserve{ReserveUp}, RangeReserve), + :Down_Reserve => ServiceModel(VariableReserve{ReserveDown}, RangeReserve), + ), +) + +op_results = solve!(operation_problem) diff --git a/v0.28.3/index.html b/v0.28.3/index.html new file mode 100644 index 0000000000..bf17341763 --- /dev/null +++ b/v0.28.3/index.html @@ -0,0 +1,2 @@ + +Welcome Page · PowerSimulations.jl

    PowerSimulations.jl

    Overview

    PowerSimulations.jl is a power system operations simulation tool developed as a flexible and open source software for quasi-static power systems simulations including Production Cost Models. PowerSimulations.jl tackles the issues of developing a simulation model in a modular way providing tools for the formulation of decision models and emulation models that can be solved independently or in an interconnected fashion.

    PowerSimulations.jl supports the workflows to develop simulations by separating the development of operations models and simulation models.

    • Operation Models: Optimization model used to find the solution of an operation problem.
    • Simulations Models: Defined the requirements to find solutions to a sequence of operation problems in a way that resembles the procedures followed by operators.

    The most common Simulation Model is the solution of a Unit Commitment and Economic Dispatch sequence of problems. This model is used in commercial Production Cost Modeling tools, but it has a limited scope of analysis.

    How the documentation is structured

    PowerSimulations.jl documentation and code are organized according to the needs of different users depending on their skillset and requirements. In broad terms there are three categories:

    • Modeler: Users that want to solve an operations problem or run a simulation using the existing models in PowerSimulations.jl. For instance, answer questions about the change in operation costs in future fuel mixes. Check the formulations library page to choose a modeling strategy that fits your needs.

    • Model Developer: Users that want to develop custom models and workflows for the simulation of a power system operation. For instance, study the impacts of an stochastic optimization problem over a deterministic.

    • Code Base Developers: Users that want to add new core functionalities or fix bugs in the core capabilities of PowerSimulations.jl.

    PowerSimulations.jl is an active project under development, and we welcome your feedback, suggestions, and bug reports.

    Note: PowerSimulations.jl uses the data model implemented in PowerSystems.jl to construct optimization models. In most cases, you need to add PowerSystems.jl to your scripts.

    Installation

    The latest stable release of PowerSimulations can be installed using the Julia package manager with

    ] add PowerSimulations

    For the current development version, "checkout" this package with

    ] add PowerSimulations#main

    An appropriate optimization solver is required for running PowerSimulations models. Refer to JuMP.jl solver's page to select the most appropriate for the application of interest.


    PowerSystems has been developed as part of the Scalable Integrated Infrastructure Planning (SIIP) initiative at the U.S. Department of Energy's National Renewable Energy Laboratory (NREL).

    diff --git a/v0.28.3/model_developer_guide/structure_of_operation_problem/index.html b/v0.28.3/model_developer_guide/structure_of_operation_problem/index.html new file mode 100644 index 0000000000..09ae5b6896 --- /dev/null +++ b/v0.28.3/model_developer_guide/structure_of_operation_problem/index.html @@ -0,0 +1,26 @@ + +Operation Problem Structure · PowerSimulations.jl

    Structure of an operations problem model

    In most cases operation problem models are optimization models. Although in PowerSimulations.jl it is possible to define arbitrary problems that can reflect heuristic decision rules, this is not the common case. This page focuses on explaining the structure of operations problems that employ an optimization problem and solver.

    The first aspect to consider when thinking about developing a model compatible with PowerSimulations.jl is that although we support all of JuMP.jl objects, you need to employ anonymous constraints and variables in JuMP and register the constraints, variables and other optimization objects into PowerSimulations.jl's optimization container. Otherwise the features to use your problem in the simulation like the coordination with other problems and post processing won't work.

    Info

    The requirements for the simulation of Power Systems operations are more strict than solving an optimization problem once with just JuMP.jl. The requirements imposed by PowerSimulations.jl to integrate your models in a simulation are designed to help with other complex operations that go beyond JuMP.jl scope.

    Warning

    All the code in this page is considered "pseudo-code". Copy-paste will likely not work out of the box. You need to develop the internals of the functions correctly for the examples below to work.

    Registering a variable in the model

    To register a variable in the model, the developer must first allocate the container into the optimization container and then populate it. For example, it require start the build function as follows:

    Info

    We recommend calling import PowerSimulations and defining the constant CONST PSI = PowerSimulations to make it easier to read the code and determine which package is responsible for defining the functions.

        function PSI.build_model!(model::PSI.DecisionModel{MyCustomModel})
    +        container = PSI.get_optimization_container(model)
    +        PSI.set_time_steps!(container, 1:24)
    +
    +        # Create the container for the variable
    +        variable = PSI.add_variable_container!(
    +            container,
    +            PSI.ActivePowerVariable(), # <- This variable is defined in PowerSimulations but the user can define their own
    +            PSY.ThermalGeneration, # <- Device type for the variable. Can be from PSY or custom defined
    +            devices_names, # <- First container dimension
    +            time_steps, # <- Second container dimension
    +        )
    +
    +        # Iterate over the devices and time to store the JuMP variables into the container.
    +        for t in time_steps, d in devices
    +            name = PSY.get_name(d)
    +            variable[name, t] = JuMP.@variable(get_jump_model(container))
    +            # It is possible to use PSY getter functions to retrieve data from the generators
    +            # Any other variable property can be specified inside this loop.
    +            JuMP.set_upper_bound(variable[name, t], UB_DATA) # <- Optional
    +            JuMP.set_lower_bound(variable[name, t], LB_DATA) # <- Optional
    +        end
    +
    +    return
    +    end
    diff --git a/v0.28.3/model_developer_guide/troubleshooting/index.html b/v0.28.3/model_developer_guide/troubleshooting/index.html new file mode 100644 index 0000000000..e40a84b953 --- /dev/null +++ b/v0.28.3/model_developer_guide/troubleshooting/index.html @@ -0,0 +1,2 @@ + +Troubleshooting · PowerSimulations.jl diff --git a/v0.28.3/modeler_guide/debugging_infeasible_models/index.html b/v0.28.3/modeler_guide/debugging_infeasible_models/index.html new file mode 100644 index 0000000000..3414888245 --- /dev/null +++ b/v0.28.3/modeler_guide/debugging_infeasible_models/index.html @@ -0,0 +1,127 @@ + +Debugging infeasible models · PowerSimulations.jl

    Debugging infeasible models

    Getting infeasible solutions to models is a common occurrence in operations simulations, there are multiple reasons why this can happen. PowerSimulations.jl has several tools to help debug this situation.

    Adding slacks to the model

    One of the most common infeasibility issues observed is due to not enough generation to supply demand, or conversely, excessive fixed (non-curtailable) generation in a low demand scenario.

    The recommended solution for any of these cases is adding slack variables to the network model, for example:

    template_uc = ProblemTemplate(
    +        NetworkModel(
    +            CopperPlatePowerModel,
    +            use_slacks=true,
    +        ),
    +    )

    will add slack variables to the ActivePowerBalance expression.

    In this case, if the problem is now feasible, the user can check the solution of the variables SystemBalanceSlackUp and SystemBalanceSlackDown, and if one value is greater than zero, it represents that not enough generation (for Slack Up) or not enough demand (for Slack Down) in the optimization problem.

    Services cases

    In many scenarios, certain units are also required to provide reserve requirements, e.g. thermal units mandated to provide up-regulation. In such scenarios, it is also possible to add slack variables, by specifying the service model (RangeReserve) for the specific service type (VariableReserve{ReserveUp}) as:

    set_service_model!(
    +    template_uc,
    +    ServiceModel(
    +        VariableReserve{ReserveUp},
    +        RangeReserve;
    +        use_slacks=true
    +    ),
    +)

    Again, if the problem is now feasible, check the solution of ReserveRequirementSlack variable, and if it is larger than zero in a specific time-step, then it is evidence that there is not enough reserve available to satisfy the requirement.

    Getting the infeasibility conflict

    Some solvers allows to identify which constraints and variables are producing the infeasibility, by finding the irreducible infeasible set (IIS), that is the subset of constraints and variable bounds that will become feasible if any single constraint or variable bound is removed.

    To enable this feature in PowerSimulations the keyword argument calculate_conflict must be set to true, when creating the DecisionModel. Note that not all solvers allow the computation of the IIS, but most commercial solvers have this capability. It is also recommended to enable the keyword argument store_variable_names=true to help understanding which variables are with infeasibility issues.

    The following code creates a decision model with the Xpress optimizer, and enabling the calculate_conflict=true keyword argument.

    DecisionModel(
    +    template_ed,
    +    sys_rts_rt;
    +    name="ED",
    +    optimizer=optimizer_with_attributes(Xpress.Optimizer, "MIPRELSTOP" => 1e-2),
    +    optimizer_solve_log_print=true,
    +    calculate_conflict=true,
    +    store_variable_names=true,
    +)

    Here is an example on how the IIS will be displayed as:

    Error: Constraints participating in conflict basis (IIS) 
    +│ 
    +│ ┌──────────────────────────────────────┐
    +│ │ CopperPlateBalanceConstraint__System │
    +│ ├──────────────────────────────────────┤
    +│ │                            (113, 26) │
    +│ └──────────────────────────────────────┘
    +│ ┌──────────────────────────────────┐
    +│ │ EnergyAssetBalance__HybridSystem │
    +│ ├──────────────────────────────────┤
    +│ │               ("317_Hybrid", 26) │
    +│ └──────────────────────────────────┘
    +│ ┌─────────────────────────────────────────────┐
    +│ │ PieceWiseLinearCostConstraint__HybridSystem │
    +│ ├─────────────────────────────────────────────┤
    +│ │                          ("317_Hybrid", 26) │
    +│ └─────────────────────────────────────────────┘
    +│ ┌────────────────────────────────────────────────┐
    +│ │ PieceWiseLinearCostConstraint__ThermalStandard │
    +│ ├────────────────────────────────────────────────┤
    +│ │                            ("202_STEAM_3", 26) │
    +│ │                            ("101_STEAM_3", 26) │
    +│ │                               ("118_CC_1", 26) │
    +│ │                            ("202_STEAM_4", 26) │
    +│ │                               ("315_CT_6", 26) │
    +│ │                            ("201_STEAM_3", 26) │
    +│ │                            ("102_STEAM_4", 26) │
    +│ └────────────────────────────────────────────────┘
    +│ ┌──────────────────────────────────────────────────────────────────────┐
    +│ │ ActivePowerVariableTimeSeriesLimitsConstraint__RenewableDispatch__ub │
    +│ ├──────────────────────────────────────────────────────────────────────┤
    +│ │                                                   ("122_WIND_1", 26) │
    +│ │                                                     ("324_PV_3", 26) │
    +│ │                                                     ("312_PV_1", 26) │
    +│ │                                                     ("102_PV_1", 26) │
    +│ │                                                     ("101_PV_1", 26) │
    +│ │                                                     ("324_PV_2", 26) │
    +│ │                                                     ("313_PV_2", 26) │
    +│ │                                                     ("104_PV_1", 26) │
    +│ │                                                     ("101_PV_2", 26) │
    +│ │                                                   ("309_WIND_1", 26) │
    +│ │                                                     ("310_PV_2", 26) │
    +│ │                                                     ("113_PV_1", 26) │
    +│ │                                                     ("314_PV_1", 26) │
    +│ │                                                     ("324_PV_1", 26) │
    +│ │                                                     ("103_PV_1", 26) │
    +│ │                                                   ("303_WIND_1", 26) │
    +│ │                                                     ("314_PV_2", 26) │
    +│ │                                                     ("102_PV_2", 26) │
    +│ │                                                     ("314_PV_3", 26) │
    +│ │                                                     ("320_PV_1", 26) │
    +│ │                                                     ("101_PV_3", 26) │
    +│ │                                                     ("319_PV_1", 26) │
    +│ │                                                     ("314_PV_4", 26) │
    +│ │                                                     ("310_PV_1", 26) │
    +│ │                                                     ("215_PV_1", 26) │
    +│ │                                                     ("313_PV_1", 26) │
    +│ │                                                     ("101_PV_4", 26) │
    +│ │                                                     ("119_PV_1", 26) │
    +│ └──────────────────────────────────────────────────────────────────────┘
    +│ ┌─────────────────────────────────────────────────────────────────────────────┐
    +│ │ FeedforwardSemiContinuousConstraint__ThermalStandard__ActivePowerVariable_ub │
    +│ ├─────────────────────────────────────────────────────────────────────────────┤
    +│ │                                                            ("322_CT_6", 26) │
    +│ │                                                            ("321_CC_1", 26) │
    +│ │                                                            ("223_CT_4", 26) │
    +│ │                                                            ("213_CT_1", 26) │
    +│ │                                                            ("223_CT_6", 26) │
    +│ │                                                            ("123_CT_1", 26) │
    +│ │                                                            ("113_CT_3", 26) │
    +│ │                                                            ("302_CT_3", 26) │
    +│ │                                                            ("215_CT_4", 26) │
    +│ │                                                            ("301_CT_4", 26) │
    +│ │                                                            ("113_CT_2", 26) │
    +│ │                                                            ("221_CC_1", 26) │
    +│ │                                                            ("223_CT_5", 26) │
    +│ │                                                            ("315_CT_7", 26) │
    +│ │                                                            ("215_CT_5", 26) │
    +│ │                                                            ("113_CT_1", 26) │
    +│ │                                                            ("307_CT_2", 26) │
    +│ │                                                            ("213_CT_2", 26) │
    +│ │                                                            ("113_CT_4", 26) │
    +│ │                                                            ("218_CC_1", 26) │
    +│ │                                                            ("213_CC_3", 26) │
    +│ │                                                            ("323_CC_2", 26) │
    +│ │                                                            ("322_CT_5", 26) │
    +│ │                                                            ("207_CT_2", 26) │
    +│ │                                                            ("123_CT_5", 26) │
    +│ │                                                            ("123_CT_4", 26) │
    +│ │                                                            ("207_CT_1", 26) │
    +│ │                                                            ("301_CT_3", 26) │
    +│ │                                                            ("302_CT_4", 26) │
    +│ │                                                            ("307_CT_1", 26) │
    +│ └─────────────────────────────────────────────────────────────────────────────┘
    +│ ┌───────────────────────────────────────────────────────┐
    +│ │ RenewableActivePowerLimitConstraint__HybridSystem__ub │
    +│ ├───────────────────────────────────────────────────────┤
    +│ │                                    ("317_Hybrid", 26) │
    +│ └───────────────────────────────────────────────────────┘
    +│ ┌───────────────────────────────────────┐
    +│ │ ThermalOnVariableUb__HybridSystem__ub │
    +│ ├───────────────────────────────────────┤
    +│ │                    ("317_Hybrid", 26) │
    +│ └───────────────────────────────────────┘
    +
    + Error: Serializing Infeasible Problem at /var/folders/1v/t69qyl0n5059n6c1nn7sp8zm7g8s6z/T/jl_jNSREb/compact_sim/problems/ED/infeasible_ED_2020-10-06T15:00:00.json

    Note that the IIS clearly identify that the issue is happening at time step 26, and constraints are related with the CopperPlateBalanceConstraint__System, with multiple upper bound constraints, for the hybrid system, renewable units and thermal units. This highlights that there may not be enough generation in the system. Indeed, by enabling system slacks, the problem become feasible.

    Finally, the infeasible model is exported in a json file that can be loaded directly in JuMP to be explored. More information about this is available here.

    diff --git a/v0.28.3/modeler_guide/definitions/index.html b/v0.28.3/modeler_guide/definitions/index.html new file mode 100644 index 0000000000..d82f8f2dd1 --- /dev/null +++ b/v0.28.3/modeler_guide/definitions/index.html @@ -0,0 +1,15 @@ + +Definitions · PowerSimulations.jl

    Definitions

    A

    • Attributes: Certain device formulations can be customized by specifying attributes that will include/remove certain variables, expressions and/or constraints. For example, in StorageSystemsSimulations.jl, the device formulation of StorageDispatchWithReserves can be specified with the following dictionary of attributes:
    set_device_model!(
    +    template,
    +    DeviceModel(
    +        GenericBattery,
    +        StorageDispatchWithReserves;
    +        attributes=Dict{String, Any}(
    +            "reservation" => false,
    +            "cycling_limits" => false,
    +            "energy_target" => false,
    +            "complete_coverage" => false,
    +            "regularization" => false,
    +        ),
    +    ),
    +)

    Changing the attributes between true or false can enable/disable multiple aspects of the formulation.

    C

    • Chronologies: In PowerSimulations.jl, chronologies define where information is flowing. There are two types of chronologies. 1) inter-stage chronologies (InterProblemChronology) that define how information flows between stages. e.g. day-ahead solutions are used to inform economic dispatch problems; and 2) intra-stage chronologies (IntraProblemChronology) that define how information flows between multiple executions of a single stage. e.g. the dispatch setpoints of the first period of an economic dispatch problem are constrained by the ramping limits from setpoints in the final period of the previous problem.

    D

    • Decision Problem: A decision problem calculates the desired system operation based on forecasts of uncertain inputs and information about the state of the system. The output of a decision problem represents the policies used to drive the set-points of the system's devices, like generators or switches, and depends on the purpose of the problem. See the Decision Model Tutorial to learn more about solving individual problems.

    • Device Formulation: The model of a device that is incorporated into a large system optimization models. For instance, the storage device model used inside of a Unit Commitment (UC) problem. A device model needs to follow some requirements to be integrated into operation problems. For more information about valid DeviceModels and their mathematical representations, check out the Formulation Library.

    E

    • Emulation Problem: An emulation problem is used to mimic the system's behavior subject to an incoming decision and the realization of a forecasted inputs. The solution of the emulator produces outputs representative of the system performance when operating subject the policies resulting from the decision models.

    F

    • FeedForward: The definition of exactly what information is passed using the defined chronologies is accomplished using FeedForwards. Specifically, a FeedForward is used to define what to do with information being passed with an inter-stage chronology in a Simulation. The most common FeedForward is the SemiContinuousFeedForward that affects the semi-continuous range constraints of thermal generators in the economic dispatch problems based on the value of the (already solved) unit-commitment variables.

    H

    I

    • Interval: The amount of time between updates to the decision problem. For instance, Day-Ahead problems usually have a 24-hour intervals and Real-Time problems have 5-minute intervals. Check the time Time Series Data Section in PowerSystems.jl

    R

    • Resolution: The amount of time between time steps in a simulation. For instance 1-hour or 5-minutes. In Julia these are defined using the syntax Hour(1) and Minute(5). Check the time Time Series Data Section in PowerSystems.jl

    • Results vs Realized Results: In PowerSimulations.jl the term results is used to refer to the solution of all optimization problems in a Simulation. When using read_variable(results, Variable) in a DecisionModel of a simulation, the output is a dictionary with the values of such variable for every optimization problem solved, while read_realized_variable(results, Variable) will return the values of the specified interval and number of steps in the simulation. See the Read Results page for more details.

    S

    • Service Formulation: The model of a service that is incorporated into a large system optimization models. Services (or ancillary services) are models used to ensure that there is necessary support to the power grid from generators to consumers, in order to ensure reliable operation of the system. The most common application for ancillary services are reserves, i.e., generation (or load) that is not currently being used, but can be quickly made available in case of unexpected changes of grid conditions, for example a sudden loss of load or generation. A service model needs to follow some requirements to be integrated into operation problems. For more information about valid ServiceModels and their mathematical representations, check out the Formulation Library.

    • Simulation: A simulation is a pre-determined sequence of decision problems in a way that solving it, resembles the solution procedures commonly used by operators. The most common simulation model is the solution of a Unit Commitment and Economic Dispatch sequence of problems.

    • Solver: A solver is a software package that incorporates algorithms for finding solutions to one or more classes of optimization problem. For example, FICO Xpress is a commercial optimization solver for linear programming (LP), convex quadratic programming (QP) problems, convex quadratically constrained quadratic programming (QCQP), second-order cone programming (SOCP) and their mixed integer counterparts. A solver is required to be specified in order to solve any computer optimization problem.

    T

    • Template: A ProblemTemplate is just a collection of DeviceModels that allows the user to specify the formulations of each set of devices (by device type) independently so that the modeler can adjust the level of detail according to the question of interest and the available data. For more information about valid DeviceModels and their mathematical representations, check out the Formulation Library.
    diff --git a/v0.28.3/modeler_guide/logging/index.html b/v0.28.3/modeler_guide/logging/index.html new file mode 100644 index 0000000000..aa0862a380 --- /dev/null +++ b/v0.28.3/modeler_guide/logging/index.html @@ -0,0 +1,11 @@ + +Logging · PowerSimulations.jl

    Logging

    PowerSimulations.jl will output many log messages when building systems and running simulations. You may want to customize what gets logged to the console and, optionally, a file.

    By default all log messages of level Logging.Info or higher will get displayed to the console. When you run a simulation a simulation-specific logger will take over and log its messages to a file in the logs directory in the simulation output directory. When finished it will relinquish control back to the global logger.

    Configuring the global logger

    To configure the global logger in a Jupyter Notebook or REPL you may configure your own logger with the Julia Logging standard library or use the convenience function provided by PowerSimulations. This example will log messages of level Logging.Error to console and Logging.Info and higher to the file power-simulations.log in the current directory.

    import Logging
    +using PowerSimulations
    +logger = configure_logging(
    +    console_level = Logging.Error,
    +    file_level = Logging.Info,
    +    filename = "power-simulations.log"
    +)

    Configuring the simulation logger

    You can configure the logging level used by the simulation logger when you call build!(simulation). Here is an example that increases logging verbosity:

    import Logging
    +using PowerSimulations
    +simulation = Simulation(...)
    +build!(simulation, console_level = Logging.Info, file_level = Logging.Debug)

    The log file will be located at <your-output-path>/<simulation-name>/<run-output-dir>/logs/simulation.log.

    Solver logs

    You can configure logging for the solver you use. Refer to the solver documentation. PowerSimulations does not redirect or intercept prints to stdout or stderr from other libraries.

    Recorder events

    PowerSimulations uses the InfrastructureSystems.Recorder to store simulation events in a log file. Refer to this link for more information.

    diff --git a/v0.28.3/modeler_guide/modeling_faq/index.html b/v0.28.3/modeler_guide/modeling_faq/index.html new file mode 100644 index 0000000000..2336d89e90 --- /dev/null +++ b/v0.28.3/modeler_guide/modeling_faq/index.html @@ -0,0 +1,2 @@ + +Modeling FAQ · PowerSimulations.jl

    Modeling FAQ

    How do I reduce the amount of print on my REPL?

    The print to the REPL is controlled with the logging. Check the Logging documentation page to see how to reduce the print out

    How do I print the optimizer logs to see the solution process?

    When specifying the DecisionModel or EmulationModel pass the keyword print_optimizer_log = true

    diff --git a/v0.28.3/modeler_guide/parallel_simulations/index.html b/v0.28.3/modeler_guide/parallel_simulations/index.html new file mode 100644 index 0000000000..57fa66f4e7 --- /dev/null +++ b/v0.28.3/modeler_guide/parallel_simulations/index.html @@ -0,0 +1,105 @@ + +Parallel Simulations · PowerSimulations.jl

    Parallel Simulations

    This section contains instructions to:

    Run a Simulation in Parallel on a local computer

    This page describes how to split a simulation into partitions, run each partition in parallel, and then join the results.

    Setup

    Create a Julia script to build and run simulations. It must meet the requirements below. A full example is in the PowerSimulations repository in test/run_partitioned_simulation.jl.

    • Call using PowerSimulations.

    • Implement a build function that matches the signature below. It must construct a Simulation, call build!, and then return the Simulation instance. It must throw an exception if the build fails.

    function build_simulation(
    +    output_dir::AbstractString,
    +    simulation_name::AbstractString,
    +    partitions::SimulationPartitions,
    +    index::Union{Nothing, Integer}=nothing,
    +)

    Here is example code to construct the Simulation with these parameters:

        sim = Simulation(
    +        name=simulation_name,
    +        steps=partitions.num_steps,
    +        models=models,
    +        sequence=sequence,
    +        simulation_folder=output_dir,
    +    )
    +    status = build!(sim; partitions=partitions, index=index, serialize=isnothing(index))
    +    if status != PSI.SimulationBuildStatus.BUILT
    +        error("Failed to build simulation: status=$status")
    +    end
    • Implement an execute function that matches the signature below. It must throw an exception if the execute fails.
    function execute_simulation(sim, args...; kwargs...)
    +    status = execute!(sim)
    +    if status != PSI.RunStatus.SUCCESSFULLY_FINALIZED
    +        error("Simulation failed to execute: status=$status")
    +    end
    +end

    Execution

    After loading your script, call the function run_parallel_simulation as shown below.

    This example splits a year-long simulation into weekly partitions for a total of 53 individual jobs and then runs them four at a time.

    julia> include("my_simulation.jl")
    +julia> run_parallel_simulation(
    +        build_simulation,
    +        execute_simulation,
    +        script="my_simulation.jl",
    +        output_dir="my_simulation_output",
    +        name="my_simulation",
    +        num_steps=365,
    +        period=7,
    +        num_overlap_steps=1,
    +        num_parallel_processes=4,
    +        exeflags="--project=<path-to-your-julia-environment>",
    +    )

    The final results will be in ./my_simulation_otuput/my_simulation

    Note the log files and results for each partition are located in ./my_simulation_otuput/my_simulation/simulation_partitions

    Run a Simulation in Parallel on an HPC

    This page describes how to split a simulation into partitions, run each partition in parallel on HPC compute nodes, and then join the results.

    These steps can be used on a local computer or any HPC supported by the submission software. Some steps may be specific to NREL's HPC Eagle cluster.

    Note: Some instructions are preliminary and will change if functionality is moved to a new Julia package.

    Setup

    1. Create a conda environment and install the Python package NREL-jade: https://nrel.github.io/jade/installation.html. The rest of this page assumes that the environment is called jade.
    2. Activate the environment with conda activate jade.
    3. Locate the path to that conda environment. It will likely be ~/.conda-envs/jade or ~/.conda/envs/jade.
    4. Load the Julia environment that you use to run simulations. Add the packages Conda and PyCall.
    5. Setup Conda to use the existing jade environment by running these commands:
    julia> run(`conda create -n conda_jl python conda`)
    +julia> ENV["CONDA_JL_HOME"] = joinpath(ENV["HOME"], ".conda-envs", "jade")  # change this to your path
    +pkg> build Conda
    1. Copy the code below into a Julia file called configure_parallel_simulation.jl. This is an interface to Jade through PyCall. It will be used to create a Jade configuration. (It may eventually be moved to a separate package.)
    function configure_parallel_simulation(
    +    script::AbstractString,
    +    num_steps::Integer,
    +    num_period_steps::Integer;
    +    num_overlap_steps::Integer=0,
    +    project_path=nothing,
    +    simulation_name="simulation",
    +    config_file="config.json",
    +    force=false,
    +)
    +    partitions = SimulationPartitions(num_steps, num_period_steps, num_overlap_steps)
    +    jgc = pyimport("jade.extensions.generic_command")
    +    julia_cmd = isnothing(project_path) ? "julia" : "julia --project=$project_path"
    +    setup_command = "$julia_cmd $script setup --simulation-name=$simulation_name " *
    +    "--num-steps=$num_steps --num-period-steps=$num_period_steps " *
    +    "--num-overlap-steps=$num_overlap_steps"
    +    teardown_command = "$julia_cmd $script join --simulation-name=$simulation_name"
    +    config = jgc.GenericCommandConfiguration(
    +        setup_command=setup_command,
    +        teardown_command=teardown_command,
    +    )
    +
    +    for i in 1:get_num_partitions(partitions)
    +        cmd = "$julia_cmd $script execute --simulation-name=$simulation_name --index=$i"
    +        job = jgc.GenericCommandParameters(command=cmd, name="execute-$i")
    +        config.add_job(job)
    +    end
    +
    +    config.dump(config_file, indent=2)
    +    println("Created Jade configuration in $config_file. " *
    +            "Run 'jade submit-jobs [options] $config_file' to execute them.")
    +end
    1. Create a Julia script to build and run simulations. It must meet the requirements below. A full example is in the PowerSimulations repository in test/run_partitioned_simulation.jl.
    • Call using PowerSimulations.

    • Implement a build function that matches the signature below. It must construct a Simulation, call build!, and then return the Simulation instance. It must throw an exception if the build fails.

    function build_simulation(
    +    output_dir::AbstractString,
    +    simulation_name::AbstractString,
    +    partitions::SimulationPartitions,
    +    index::Union{Nothing, Integer}=nothing,
    +)

    Here is example code to construct the Simulation with these parameters:

        sim = Simulation(
    +        name=simulation_name,
    +        steps=partitions.num_steps,
    +        models=models,
    +        sequence=sequence,
    +        simulation_folder=output_dir,
    +    )
    +    status = build!(sim; partitions=partitions, index=index, serialize=isnothing(index))
    +    if status != PSI.SimulationBuildStatus.BUILT
    +        error("Failed to build simulation: status=$status")
    +    end
    • Implement an execute function that matches the signature below. It must throw an exception if the execute fails.
    function execute_simulation(sim, args...; kwargs...)
    +    status = execute!(sim)
    +    if status != PSI.RunStatus.SUCCESSFULLY_FINALIZED
    +        error("Simulation failed to execute: status=$status")
    +    end
    +end
    • Make the script runnable as a CLI command by including the following code at the bottom of the

    file.

    function main()
    +    process_simulation_partition_cli_args(build_simulation, execute_simulation, ARGS...)
    +end
    +
    +if abspath(PROGRAM_FILE) == @__FILE__
    +    main()
    +end

    Execution

    1. Create a Jade configuration that defines the partitioned simulation jobs. Load your Julia environment.

      This example splits a year-long simulation into weekly partitions for a total of 53 individual jobs.

    julia> include("configure_parallel_simulation.jl")
    +julia> num_steps = 365
    +julia> period = 7
    +julia> num_overlap_steps = 1
    +julia> configure_parallel_simulation(
    +    "my_simulation.jl",  # this is your build/execute script
    +    num_steps,
    +    period,
    +    num_overlap_steps=1,
    +    project_path=".",  # This optionally specifies the Julia project environment to load.
    +)
    +Created Jade configuration in config.json. Run 'jade submit-jobs [options] config.json' to execute them.

    Exit Julia.

    1. View the configuration for accuracy.
    $ jade config show config.json
    1. Start an interactive session on a debug node. Do not submit the jobs on a login node! The submission step will run a full build of the simulation and that may consume too many CPU and memory resources for the login node.
    $ salloc -t 01:00:00 -N1 --account=<your-account> --partition=debug
    1. Follow the instructions at https://nrel.github.io/jade/tutorial.html to submit the jobs. The example below will configure Jade to run each partition on its own compute node. Depending on the compute and memory constraints of your simulation, you may be able to pack more jobs on each node.

      Adjust the walltime as necessary.

    $ jade config hpc -c hpc_config.toml -t slurm  --walltime=04:00:00 -a <your-account>
    +$ jade submit-jobs config.json --per-node-batch-size=1 -o output

    If you are unsure about how much memory and CPU resources your simulation consumes, add these options:

    $ jade submit-jobs config.json --per-node-batch-size=1 -o output --resource-monitor-type periodic --resource-monitor-interval 3

    Jade will create HTML plots of the resource utilization in output/stats. You may be able to customize --per-node-batch-size and --num-processes to finish the simulations more quickly.

    1. Jade will run a final command to join the simulation partitions into one unified file. You can load the results as you normally would.
    julia> results = SimulationResults("<output-dir>/job-outputs/<simulation-name>")

    Note the log files and results for each partition are located in <output-dir>/job-outputs/<simulation-name>/simulation_partitions

    diff --git a/v0.28.3/modeler_guide/problem_templates/index.html b/v0.28.3/modeler_guide/problem_templates/index.html new file mode 100644 index 0000000000..c25039d843 --- /dev/null +++ b/v0.28.3/modeler_guide/problem_templates/index.html @@ -0,0 +1,252 @@ + +Operations ProblemTemplates · PowerSimulations.jl

    Operations ProblemTemplates

    Templates are used to specify the modeling properties of the devices and network that are going to he used to specify a problem. A ProblemTemplate is just a collection of DeviceModels that allows the user to specify the formulations of each set of devices (by device type) independently so that the modeler can adjust the level of detail according to the question of interest and the available data. For more information about valid DeviceModels and their mathematical representations, check out the Formulation Library.

    Building a ProblemTemplate

    You can build a ProblemTemplate by adding a NetworkModel, DeviceModels, and ServiceModels.

    template = ProblemTemplate()
    +set_network_model!(template, NetworkModel(CopperPlatePowerModel))
    +set_device_model!(template, PowerLoad, StaticPowerLoad)
    +set_device_model!(template, ThermalStandard, ThermalBasicUnitCommitment)
    +set_service_model!(template, VariableReserve{ReserveUp}, RangeReserve)

    Default Templates

    PowerSimulations.jl provides default templates for common operation problems. You can retrieve a default template and modify it according to your requirements. Currently supported default templates are:

    PowerSimulations.template_economic_dispatchFunction
    template_economic_dispatch(; kwargs...) -> ProblemTemplate
    +
    template_economic_dispatch(; kwargs...)

    Creates a ProblemTemplate with default DeviceModels for an Economic Dispatch problem.

    Example

    template = templateeconomicdispatch()

    
    +# Accepted Key Words
    +- `network::Type{<:PM.AbstractPowerModel}` : override default network model settings
    +- `devices::Vector{DeviceModel}` : override default `DeviceModel` settings
    +- `services::Vector{ServiceModel}` : override default `ServiceModel` settings
    source
    template_economic_dispatch()
    + + + + + + + + + + + + + + + + + + + +
    Network Model
    Network ModelCopperPlatePowerModel
    Slacksfalse
    PTDFfalse
    DualsNone
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Device Models
    Device TypeFormulationSlacks
    RenewableNonDispatchFixedOutputfalse
    ThermalStandardThermalBasicDispatchfalse
    PowerLoadStaticPowerLoadfalse
    InterruptiblePowerLoadPowerLoadInterruptionfalse
    RenewableDispatchRenewableFullDispatchfalse
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Branch Models
    Branch TypeFormulationSlacks
    LineStaticBranchfalse
    TapTransformerStaticBranchfalse
    Transformer2WStaticBranchfalse
    TwoTerminalHVDCLineHVDCTwoTerminalDispatchfalse
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Service Models
    Service TypeFormulationSlacksAggregated Model
    VariableReserve{ReserveUp}RangeReservefalsetrue
    VariableReserve{ReserveDown}RangeReservefalsetrue
    +
    PowerSimulations.template_unit_commitmentFunction
    template_unit_commitment(; kwargs...) -> ProblemTemplate
    +
    template_unit_commitment(; kwargs...)

    Creates a ProblemTemplate with default DeviceModels for a Unit Commitment problem.

    Example

    template = templateunitcommitment()

    
    +# Accepted Key Words
    +- `network::Type{<:PM.AbstractPowerModel}` : override default network model settings
    +- `devices::Vector{DeviceModel}` : override default `DeviceModel` settings
    +- `services::Vector{ServiceModel}` : override default `ServiceModel` settings
    source
    template_unit_commitment()
    + + + + + + + + + + + + + + + + + + + +
    Network Model
    Network ModelCopperPlatePowerModel
    Slacksfalse
    PTDFfalse
    DualsNone
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Device Models
    Device TypeFormulationSlacks
    RenewableNonDispatchFixedOutputfalse
    ThermalStandardThermalBasicUnitCommitmentfalse
    PowerLoadStaticPowerLoadfalse
    InterruptiblePowerLoadPowerLoadInterruptionfalse
    RenewableDispatchRenewableFullDispatchfalse
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Branch Models
    Branch TypeFormulationSlacks
    LineStaticBranchfalse
    TapTransformerStaticBranchfalse
    Transformer2WStaticBranchfalse
    TwoTerminalHVDCLineHVDCTwoTerminalDispatchfalse
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Service Models
    Service TypeFormulationSlacksAggregated Model
    VariableReserve{ReserveUp}RangeReservefalsetrue
    VariableReserve{ReserveDown}RangeReservefalsetrue
    +
    diff --git a/v0.28.3/modeler_guide/psi_structure/index.html b/v0.28.3/modeler_guide/psi_structure/index.html new file mode 100644 index 0000000000..50372600a2 --- /dev/null +++ b/v0.28.3/modeler_guide/psi_structure/index.html @@ -0,0 +1,2 @@ + +PowerSimulations.jl Modeling Structure · PowerSimulations.jl

    PowerSimulations.jl Modeling Structure

    PowerSimulations enables the simulation of a sequence of power systems optimization problems and provides user control over each aspect of the simulation configuration. Specifically:

    What is the difference between a Model and a Problem?

    A "Problem" is an abstract mathematical description of how to represent power system behavior, whereas a "Model" is a concrete representation of a "Problem" applied to a dataset. I.e. once a Problem is populated with data describing all the loads, generators, lines, etc., it becomes a Model.

    diff --git a/v0.28.3/modeler_guide/read_results/index.html b/v0.28.3/modeler_guide/read_results/index.html new file mode 100644 index 0000000000..ab1d0eb824 --- /dev/null +++ b/v0.28.3/modeler_guide/read_results/index.html @@ -0,0 +1,127 @@ + +Read results · PowerSimulations.jl

    Read results

    Once a DecisionModel is solved via solve!(model) or a Simulation is executed (and solved) via execute!(simulation), the results are stored and can be accessed directly in the REPL for result exploration and plotting.

    Read results of a Decision Problem

    Once a DecisionModel is solved, results are accessed using OptimizationProblemResults(model) as follows:

    # The DecisionModel is already constructed
    +build!(model, output_dir = mktempdir())
    +solve!(model)
    +
    +results = OptimizationProblemResults(model)

    The output will showcase the available expressions, parameters and variables to read. For example it will look like:

    Start: 2020-01-01T00:00:00
    +End: 2020-01-03T23:00:00
    +Resolution: 60 minutes
    +
    +PowerSimulations Problem Auxiliary variables Results
    +┌──────────────────────────────────────────┐
    +│ CumulativeCyclingCharge__HybridSystem    │
    +│ CumulativeCyclingDischarge__HybridSystem │
    +└──────────────────────────────────────────┘
    +
    +PowerSimulations Problem Expressions Results
    +┌─────────────────────────────────────────────┐
    +│ ProductionCostExpression__RenewableDispatch │
    +│ ProductionCostExpression__ThermalStandard   │
    +└─────────────────────────────────────────────┘
    +
    +PowerSimulations Problem Duals Results
    +┌──────────────────────────────────────┐
    +│ CopperPlateBalanceConstraint__System │
    +└──────────────────────────────────────┘
    +
    +PowerSimulations Problem Parameters Results
    +┌────────────────────────────────────────────────────────────────────────┐
    +│ ActivePowerTimeSeriesParameter__RenewableNonDispatch                           │
    +│ RenewablePowerTimeSeries__HybridSystem                                 │
    +│ RequirementTimeSeriesParameter__VariableReserve__ReserveUp__Spin_Up_R3 │
    +│ RequirementTimeSeriesParameter__VariableReserve__ReserveUp__Reg_Up     │
    +│ ActivePowerTimeSeriesParameter__PowerLoad                              │
    +│ ActivePowerTimeSeriesParameter__RenewableDispatch                      │
    +│ RequirementTimeSeriesParameter__VariableReserve__ReserveDown__Reg_Down │
    +│ ActivePowerTimeSeriesParameter__HydroDispatch                          │
    +│ RequirementTimeSeriesParameter__VariableReserve__ReserveUp__Spin_Up_R1 │
    +│ RequirementTimeSeriesParameter__VariableReserve__ReserveUp__Spin_Up_R2 │
    +└────────────────────────────────────────────────────────────────────────┘
    +
    +PowerSimulations Problem Variables Results
    +┌────────────────────────────────────────────────────────────────────┐
    +│ ActivePowerOutVariable__HybridSystem                               │
    +│ ReservationVariable__HybridSystem                                  │
    +│ RenewablePower__HybridSystem                                       │
    +│ ActivePowerReserveVariable__VariableReserve__ReserveUp__Spin_Up_R1 │
    +│ SystemBalanceSlackUp__System                                       │
    +│ BatteryEnergyShortageVariable__HybridSystem                        │
    +│ ActivePowerReserveVariable__VariableReserve__ReserveUp__Reg_Up     │
    +│ StopVariable__ThermalStandard                                      │
    +│ BatteryStatus__HybridSystem                                        │
    +│ BatteryDischarge__HybridSystem                                     │
    +│ ActivePowerInVariable__HybridSystem                                │
    +│ DischargeRegularizationVariable__HybridSystem                      │
    +│ BatteryCharge__HybridSystem                                        │
    +│ ActivePowerVariable__RenewableDispatch                             │
    +│ ActivePowerReserveVariable__VariableReserve__ReserveDown__Reg_Down │
    +│ EnergyVariable__HybridSystem                                       │
    +│ OnVariable__HybridSystem                                           │
    +│ BatteryEnergySurplusVariable__HybridSystem                         │
    +│ SystemBalanceSlackDown__System                                     │
    +│ ActivePowerReserveVariable__VariableReserve__ReserveUp__Spin_Up_R2 │
    +│ ThermalPower__HybridSystem                                         │
    +│ ActivePowerVariable__ThermalStandard                               │
    +│ StartVariable__ThermalStandard                                     │
    +│ ActivePowerReserveVariable__VariableReserve__ReserveUp__Spin_Up_R3 │
    +│ OnVariable__ThermalStandard                                        │
    +│ ChargeRegularizationVariable__HybridSystem                         │
    +└────────────────────────────────────────────────────────────────────┘

    Then the following code can be used to read results:

    # Read active power of Thermal Standard
    +thermal_active_power = read_variable(results, "ActivePowerVariable__ThermalStandard")
    +
    +# Read max active power parameter of RenewableDispatch
    +renewable_param = read_parameter(results, "ActivePowerTimeSeriesParameter__RenewableDispatch")
    +
    +# Read cost expressions of ThermalStandard units
    +cost_thermal = read_expression(results, "ProductionCostExpression__ThermalStandard")
    +
    +# Read dual variables
    +dual_balance_constraint = read_dual(results, "CopperPlateBalanceConstraint__System")
    +
    +# Read auxiliary variables
    +aux_var_result = read_aux_variable(results, "CumulativeCyclingCharge__HybridSystem")

    Results will be in the form of DataFrames that can be easily explored.

    Read results of a Simulation

    # The Simulation is already constructed
    +build!(sim)
    +execute!(sim; enable_progress_bar=true)
    +
    +results_sim = SimulationResults(sim)

    As an example, the SimulationResults printing will look like:

    Decision Problem Results
    +┌──────────────┬─────────────────────┬──────────────┬─────────────────────────┐
    +│ Problem Name │ Initial Time        │ Resolution   │ Last Solution Timestamp │
    +├──────────────┼─────────────────────┼──────────────┼─────────────────────────┤
    +│ ED           │ 2020-10-02T00:00:00 │ 60 minutes   │ 2020-10-09T23:00:00     │
    +│ UC           │ 2020-10-02T00:00:00 │ 1440 minutes │ 2020-10-09T00:00:00     │
    +└──────────────┴─────────────────────┴──────────────┴─────────────────────────┘
    +
    +Emulator Results
    +┌─────────────────┬───────────┐
    +│ Name            │ Emulator  │
    +│ Resolution      │ 5 minutes │
    +│ Number of steps │ 2304      │
    +└─────────────────┴───────────┘

    With this, it is possible to obtain results of each DecisionModel and EmulationModel as follows:

    # Use the Problem Name for Decision Problems
    +results_uc = get_decision_problem_results(results_sim, "UC")
    +results_ed = get_decision_problem_results(results_sim, "ED")
    +results_emulator = get_emulation_problem_results(results_sim)

    Once we have each decision (or emulation) problem results, we can explore directly using the approach for Decision Models, mentioned in the previous section.

    Reading solutions for all simulation steps

    In this case, using read_variable (or read expression, parameter or dual), will return a dictionary of all steps (of that Decision Problem). For example, the following code:

    thermal_active_power = read_variable(results_uc, "ActivePowerVariable__ThermalStandard")

    will return:

    DataStructures.SortedDict{Any, Any, Base.Order.ForwardOrdering} with 8 entries:
    +  DateTime("2020-10-02T00:00:00") => 72×54 DataFrame…
    +  DateTime("2020-10-03T00:00:00") => 72×54 DataFrame…
    +  DateTime("2020-10-04T00:00:00") => 72×54 DataFrame…
    +  DateTime("2020-10-05T00:00:00") => 72×54 DataFrame…
    +  DateTime("2020-10-06T00:00:00") => 72×54 DataFrame…
    +  DateTime("2020-10-07T00:00:00") => 72×54 DataFrame…
    +  DateTime("2020-10-08T00:00:00") => 72×54 DataFrame…
    +  DateTime("2020-10-09T00:00:00") => 72×54 DataFrame…

    That is, a sorted dictionary for each simulation step, using as a key the initial timestamp for that specific simulation step.

    Note that in this case, each DataFrame, has a dimension of $72 \times 54$, since the horizon is 72 hours (number of rows), but the interval is only 24 hours. Indeed, note the initial timestamp of each simulation step is the beginning of each day, i.e. 24 hours. Finally, there 54 columns, since this example system has 53 ThermalStandard units (plus 1 column for the timestamps). The user is free to explore the solution of any simulation step as needed.

    Reading the "realized" solution (i.e. the interval)

    Using read_realized_variable (or read realized expression, parameter or dual), will return the DataFrame of the realized solution of any specific variable. That is, it will concatenate the corresponding simulation step with the specified interval of that step, to construct a single DataFrame with the "realized solution" of the entire simulation.

    For example, the code:

    th_realized_power = read_realized_variable(results_uc, "ActivePowerVariable__ThermalStandard")

    will return:

    92×54 DataFrame
    + Row │ DateTime             322_CT_6      321_CC_1  202_STEAM_3   223_CT_4  123_STEAM_2    213_CT_1  223_CT_6  313_CC_1  101_STEAM_3  123_C ⋯
    +     │ DateTime             Float64       Float64   Float64       Float64   Float64        Float64   Float64   Float64   Float64      Float ⋯
    +─────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
    +   1 │ 2020-10-02T00:00:00   0.0           293.333   0.0               0.0    0.0               0.0       0.0   231.667      76.0     0.0   ⋯
    +   2 │ 2020-10-02T01:00:00   0.0           267.552   0.0               0.0    0.0               0.0       0.0   231.667      76.0     0.0
    +   3 │ 2020-10-02T02:00:00   0.0           234.255   0.0               0.0   -4.97544e-11       0.0       0.0   231.667      76.0     0.0
    +   4 │ 2020-10-02T03:00:00   0.0           249.099   0.0               0.0   -4.97544e-11       0.0       0.0   231.667      76.0     0.0
    +   5 │ 2020-10-02T04:00:00   0.0           293.333   0.0               0.0   -4.97544e-11       0.0       0.0   231.667      76.0     0.0   ⋯
    +   6 │ 2020-10-02T05:00:00   0.0           293.333   1.27578e-11       0.0   -4.97544e-11       0.0       0.0   293.333      76.0     0.0
    +  ⋮  │          ⋮                ⋮           ⋮           ⋮           ⋮            ⋮           ⋮         ⋮         ⋮           ⋮             ⋱
    + 187 │ 2020-10-09T18:00:00   0.0           293.333  76.0               0.0  155.0               0.0       0.0   318.843      76.0     0.0
    + 188 │ 2020-10-09T19:00:00   0.0           293.333  76.0               0.0  124.0               0.0       0.0   293.333      76.0     0.0
    + 189 │ 2020-10-09T20:00:00   0.0           293.333  60.6667            0.0  124.0               0.0       0.0     0.0        76.0     0.0   ⋯
    + 190 │ 2020-10-09T21:00:00  -7.65965e-12   293.333  60.6667            0.0  124.0               0.0       0.0     0.0        76.0     0.0
    + 191 │ 2020-10-09T22:00:00   0.0             0.0    60.6667            0.0  124.0               0.0       0.0     0.0        76.0     7.156
    + 192 │ 2020-10-09T23:00:00   0.0             0.0    60.6667            0.0  117.81              0.0       0.0     0.0        76.0     0.0
    +                                                                                                              44 columns and 180 rows omitted

    In this case, the 8 simulation steps of 24 hours (192 hours), in a single DataFrame, to enable easy exploration of the realized results for the user.

    diff --git a/v0.28.3/modeler_guide/running_a_simulation/index.html b/v0.28.3/modeler_guide/running_a_simulation/index.html new file mode 100644 index 0000000000..46d2cf8439 --- /dev/null +++ b/v0.28.3/modeler_guide/running_a_simulation/index.html @@ -0,0 +1,75 @@ + +Simulation · PowerSimulations.jl

    Simulation

    Always try to solve the operations problem first before putting together the simulation

    It is not uncommon that when trying to solve a complex simulation the resulting models are infeasible. This situation can be the result of many factors like the input data, the incorrect specification of the initial conditions for models with time dependencies or a poorly specified model. Therefore, it's highly recommended to run and analyze an Operations Problems that reflect the problems that will be included in a simulation prior to executing a simulation.

    Check out the Operations Problem Tutorial

    Feedforward

    The definition of exactly what information is passed using the defined chronologies is accomplished using FeedForwards.

    Specifically, a FeedForward is used to define what to do with information being passed with an inter-stage chronology in a Simulation. The most common FeedForward is the SemiContinuousFeedForward that affects the semi-continuous range constraints of thermal generators in the economic dispatch problems based on the value of the (already solved) unit-commitment variables.

    The creation of a FeedForward requires at least to specify the component_type on which the FeedForward will be applied. The source variable specify which variable will be taken from the problem solved, for example the commitment variable of the thermal unit in the unit commitment problem. Finally, the affected_values specify which variables will be affected in the problem to be solved, for example the next economic dispatch problem.

    The following code specify the creation of semi-continuous range constraints on the ActivePowerVariable based on the solution of the commitment variable OnVariable for all ThermalStandard units.

    SemiContinuousFeedforward(
    +    component_type=ThermalStandard,
    +    source=OnVariable,
    +    affected_values=[ActivePowerVariable],
    +)

    Chronologies

    In PowerSimulations, chronologies define where information is flowing. There are two types of chronologies.

    • inter-stage chronologies: Define how information flows between stages. e.g. day-ahead solutions are used to inform economic dispatch problems
    • intra-stage chronologies: Define how information flows between multiple executions of a single stage. e.g. the dispatch setpoints of the first period of an economic dispatch problem are constrained by the ramping limits from setpoints in the final period of the previous problem.

    Sequencing

    In a typical simulation pipeline, we want to connect daily (24-hours) day-ahead unit commitment problems, with multiple economic dispatch problems. Usually, our day-ahead unit commitment problem will have an hourly (1-hour) resolution, while the economic dispatch will have a 5-minute resolution.

    Depending on your problem, it is common to use a 2-day look-ahead for unit commitment problems, so in this case, the Day-Ahead problem will have: resolution = Hour(1) with interval = Hour(24) and horizon = Hour(48). In the case of the economic dispatch problem, it is common to use a look-ahead of two hours. Thus, the Real-Time problem will have: resolution = Minute(5), with interval = Minute(5) (we only store the first operating point) and horizon = 24 (24 time steps of 5 minutes are 120 minutes, that is 2 hours).

    Simulation Setup

    The following code creates the entire simulation pipeline:

    # We assume that the templates for UC and ED are ready
    +# sys_da has the resolution of 1 hour:
    +# with the 24 hours interval and horizon of 48 hours.
    +# sys_rt has the resolution of 5 minutes:
    +# with a 5-minute interval and horizon of 2 hours (24 time steps)
    +
    +# Create the UC Decision Model
    +decision_model_uc = DecisionModel(
    +    template_uc,
    +    sys_da;
    +    name="UC",
    +    optimizer=optimizer_with_attributes(
    +        Xpress.Optimizer,
    +        "MIPRELSTOP" => 1e-1,
    +    ),
    +)
    +
    +# Create the ED Decision Model
    +decision_model_ed = DecisionModel(
    +    template_ed,
    +    sys_rt;
    +    name="ED",
    +    optimizer=optimizer_with_attributes(Xpress.Optimizer),
    +)
    +
    +# Specify the SimulationModels using a Vector of decision_models: UC, ED
    +sim_models = SimulationModels(
    +    decision_models=[
    +        decision_model_uc,
    +        decision_model_ed,
    +    ],
    +)
    +
    +# Create the FeedForwards:
    +semi_ff = SemiContinuousFeedforward(
    +    component_type=ThermalStandard,
    +    source=OnVariable,
    +    affected_values=[ActivePowerVariable],
    +)
    +
    +# Specify the sequencing:
    +sim_sequence = SimulationSequence(
    +    # Specify the vector of decision models: sim_models
    +    models=sim_models,
    +    # Specify a Dict of feedforwards on which the FF applies
    +    # based on the DecisionModel name, in this case "ED"
    +    feedforwards=Dict(
    +        "ED" => [semi_ff],
    +    ),
    +    # Specify the chronology, in this case inter-stage
    +    ini_cond_chronology=InterProblemChronology(),
    +)
    +
    +# Construct the simulation:
    +sim = Simulation(
    +    name="compact_sim",
    +    steps=10, # 10 days
    +    models=sim_models,
    +    sequence=sim_sequence,
    +    # Specify the start_time as a DateTime: e.g. DateTime("2020-10-01T00:00:00")
    +    initial_time=start_time,
    +    # Specify a temporary folder to avoid storing logs if not needed
    +    simulation_folder=mktempdir(cleanup=true),
    +)
    +
    +# Build the decision models and simulation setup
    +build!(sim)
    +
    +# Execute the simulation using the Optimizer specified in each DecisionModel
    +execute!(sim, enable_progress_bar=true)

    Check the PCM tutorial for a more detailed tutorial on executing a simulation in a production cost modeling (PCM) environment.

    diff --git a/v0.28.3/modeler_guide/simulation_recorder/index.html b/v0.28.3/modeler_guide/simulation_recorder/index.html new file mode 100644 index 0000000000..c3b4c41a36 --- /dev/null +++ b/v0.28.3/modeler_guide/simulation_recorder/index.html @@ -0,0 +1,43 @@ + +Simulation Recorder · PowerSimulations.jl

    Simulation Recorder

    PowerSimulations.jl provides the ability to record structured data as events during a simulation. These events can be post-processed to help debug problems.

    By default only SimulationStepEvent and ProblemExecutionEvent are recorded. Here is an example.

    Suppose a simulation is run in the directory ./output.

    Assume that setup commands have been run:

    using PowerSimulations
    +const PSI = PowerSimulations

    Note that for all functions below you can optionally specify a function to filter events. The function must accept the event type and return true or false.

    Show all events of type PSI.SimulationStepEvent

    julia> show_simulation_events(PSI.SimulationStepEvent, "./output/aggregation/1")
    +┌─────────────────────┬─────────────────────┬──────┬────────┐
    +│                name │     simulation_time │ step │ status │
    +├─────────────────────┼─────────────────────┼──────┼────────┤
    +│ SimulationStepEvent │ 2024-01-01T00:00:00 │    1 │  start │
    +│ SimulationStepEvent │ 2024-01-01T23:00:00 │    1 │   done │
    +│ SimulationStepEvent │ 2024-01-01T23:00:00 │    2 │  start │
    +│ SimulationStepEvent │ 2024-01-02T23:00:00 │    2 │   done │
    +└─────────────────────┴─────────────────────┴──────┴────────┘

    Show events of type PSI.ProblemExecutionEvent for a specific step and stage.

    show_simulation_events(
    +    PSI.ProblemExecutionEvent,
    +    "./output/aggregation/1",
    +    x -> x.step == 1 && x.stage == 2 && x.status == "start"
    +)
    +┌──────────────────────┬─────────────────────┬──────┬───────┬────────┐
    +│                 name │     simulation_time │ step │ stage │ status │
    +├──────────────────────┼─────────────────────┼──────┼───────┼────────┤
    +│ ProblemExecutionEvent │ 2024-01-01T00:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T00:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T01:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T02:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T03:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T04:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T05:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T06:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T07:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T08:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T09:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T10:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T11:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T12:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T13:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T14:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T15:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T16:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T17:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T18:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T19:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T20:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T21:00:00 │    1 │     2 │  start │
    +│ ProblemExecutionEvent │ 2024-01-01T22:00:00 │    1 │     2 │  start │
    +└──────────────────────┴─────────────────────┴──────┴───────┴────────┘
    diff --git a/v0.28.3/modeler_guide/tips_and_tricks/index.html b/v0.28.3/modeler_guide/tips_and_tricks/index.html new file mode 100644 index 0000000000..f87adfebdb --- /dev/null +++ b/v0.28.3/modeler_guide/tips_and_tricks/index.html @@ -0,0 +1,2 @@ + +Tips and tricks · PowerSimulations.jl diff --git a/v0.28.3/quick_start_guide/index.html b/v0.28.3/quick_start_guide/index.html new file mode 100644 index 0000000000..d958f7f104 --- /dev/null +++ b/v0.28.3/quick_start_guide/index.html @@ -0,0 +1,2 @@ + +Quick Start Guide · PowerSimulations.jl

    Quick Start Guide

    Tip

    If you need to develop a dataset for a simulation check the PowerSystems.jl Tutorials on how to parse data and attach time series

    • Tutorial: If you are eager to run your first simulation visit the Solve a Day Ahead Market Scheduling Problem using PowerSimulations.jl tutorial
    diff --git a/v0.28.3/search/index.html b/v0.28.3/search/index.html new file mode 100644 index 0000000000..3c96b70633 --- /dev/null +++ b/v0.28.3/search/index.html @@ -0,0 +1,2 @@ + +Search · PowerSimulations.jl diff --git a/v0.28.3/search_index.js b/v0.28.3/search_index.js new file mode 100644 index 0000000000..d12f34d91f --- /dev/null +++ b/v0.28.3/search_index.js @@ -0,0 +1,3 @@ +var documenterSearchIndex = {"docs": +[{"location":"formulation_library/Network/#network_formulations","page":"Network","title":"Network Formulations","text":"","category":"section"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Network formulations are used to describe how the network and buses are handled when constructing constraints. The most common constraint decided by the network formulation is the supply-demand balance constraint. Available Network Models are:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Formulation Description\nCopperPlatePowerModel Copper plate connection between all components, i.e. infinite transmission capacity\nAreaBalancePowerModel Network model approximation to represent inter-area flow with each area represented as a single node\nPTDFPowerModel Uses the PTDF factor matrix to compute the fraction of power transferred in the network across the branches\nAreaPTDFPowerModel Uses the PTDF factor matrix to compute the fraction of power transferred in the network across the branches and balances power by Area instead of system-wide","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"PowerModels.jl available formulations:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Exact non-convex models: ACPPowerModel, ACRPowerModel, ACTPowerModel.\nLinear approximations: DCPPowerModel, NFAPowerModel.\nQuadratic approximations: DCPLLPowerModel, LPACCPowerModel\nQuadratic relaxations: SOCWRPowerModel, SOCWRConicPowerModel, SOCBFPowerModel, SOCBFConicPowerModel, QCRMPowerModel, QCLSPowerModel.\nSDP relaxations: SDPWRMPowerModel, SparseSDPWRMPowerModel.","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"All of these formulations are described in the PowerModels.jl documentation and will not be described here.","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"","category":"page"},{"location":"formulation_library/Network/#CopperPlatePowerModel","page":"Network","title":"CopperPlatePowerModel","text":"","category":"section"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"CopperPlatePowerModel","category":"page"},{"location":"formulation_library/Network/#PowerSimulations.CopperPlatePowerModel","page":"Network","title":"PowerSimulations.CopperPlatePowerModel","text":"Infinite capacity approximation of network flow to represent entire system with a single node.\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Variables:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"If Slack variables are enabled:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"SystemBalanceSlackUp:\nBounds: [0.0, ]\nDefault initial value: 0.0\nDefault proportional cost: 1e6\nSymbol: p^textslup\nSystemBalanceSlackDown:\nBounds: [0.0, ]\nDefault initial value: 0.0\nDefault proportional cost: 1e6\nSymbol: p^textsldn","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Objective:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Add a large proportional cost to the objective function if slack variables are used + (p^textslup + p^textsldn) cdot 10^6","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Expressions:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Adds p^textslup and p^textsldn terms to the respective active power balance expressions ActivePowerBalance created by this CopperPlatePowerModel network formulation.","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Constraints:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Adds the CopperPlateBalanceConstraint to balance the active power of all components available in the system","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"beginalign\n sum_c in textcomponents p_t^c = 0 quad forall t in 1 dots T\nendalign","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"","category":"page"},{"location":"formulation_library/Network/#AreaBalancePowerModel","page":"Network","title":"AreaBalancePowerModel","text":"","category":"section"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"AreaBalancePowerModel","category":"page"},{"location":"formulation_library/Network/#PowerSimulations.AreaBalancePowerModel","page":"Network","title":"PowerSimulations.AreaBalancePowerModel","text":"Approximation to represent inter-area flow with each area represented as a single node.\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Variables: If Slack variables are enabled:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"SystemBalanceSlackUp by area:\nBounds: [0.0, ]\nDefault initial value: 0.0\nDefault proportional cost: 1e6\nSymbol: p^textslup\nSystemBalanceSlackDown by area:\nBounds: [0.0, ]\nDefault initial value: 0.0\nDefault proportional cost: 1e6\nSymbol: p^textsldn","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Objective:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Adds p^textslup and p^textsldn terms to the respective active power balance expressions ActivePowerBalance per area.","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Expressions:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Creates ActivePowerBalance expressions for each area that then are used to balance active power for all buses within a single area.","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Constraints:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Adds the CopperPlateBalanceConstraint to balance the active power of all components available in an area.","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"beginalign\n sum_c in textcomponents_a p_t^c = 0 quad forall ain 1dots A t in 1 dots T\nendalign","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"","category":"page"},{"location":"formulation_library/Network/#PTDFPowerModel","page":"Network","title":"PTDFPowerModel","text":"","category":"section"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"PTDFPowerModel","category":"page"},{"location":"formulation_library/Network/#PowerSimulations.PTDFPowerModel","page":"Network","title":"PowerSimulations.PTDFPowerModel","text":"Linear active power approximation using the power transfer distribution factor PTDF matrix.\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Variables:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"If Slack variables are enabled:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"SystemBalanceSlackUp:\nBounds: [0.0, ]\nDefault initial value: 0.0\nDefault proportional cost: 1e6\nSymbol: p^textslup\nSystemBalanceSlackDown:\nBounds: [0.0, ]\nDefault initial value: 0.0\nDefault proportional cost: 1e6\nSymbol: p^textsldn","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Objective:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Add a large proportional cost to the objective function if slack variables are used + (p^textslup + p^textsldn) cdot 10^6","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Expressions:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Adds p^textslup and p^textsldn terms to the respective system-wide active power balance expressions ActivePowerBalance created by this CopperPlatePowerModel network formulation. In addition, it creates ActivePowerBalance expressions for each bus to be used in the calculation of branch flows.","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Constraints:","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"Adds the CopperPlateBalanceConstraint to balance the active power of all components available in the system","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"beginalign\n sum_c in textcomponents p_t^c = 0 quad forall t in 1 dots T\nendalign","category":"page"},{"location":"formulation_library/Network/","page":"Network","title":"Network","text":"In addition creates NodalBalanceActiveConstraint for HVDC buses balance, if DC components are connected to an HVDC network.","category":"page"},{"location":"modeler_guide/simulation_recorder/#Simulation-Recorder","page":"Simulation Recorder","title":"Simulation Recorder","text":"","category":"section"},{"location":"modeler_guide/simulation_recorder/","page":"Simulation Recorder","title":"Simulation Recorder","text":"PowerSimulations.jl provides the ability to record structured data as events during a simulation. These events can be post-processed to help debug problems.","category":"page"},{"location":"modeler_guide/simulation_recorder/","page":"Simulation Recorder","title":"Simulation Recorder","text":"By default only SimulationStepEvent and ProblemExecutionEvent are recorded. Here is an example.","category":"page"},{"location":"modeler_guide/simulation_recorder/","page":"Simulation Recorder","title":"Simulation Recorder","text":"Suppose a simulation is run in the directory ./output.","category":"page"},{"location":"modeler_guide/simulation_recorder/","page":"Simulation Recorder","title":"Simulation Recorder","text":"Assume that setup commands have been run:","category":"page"},{"location":"modeler_guide/simulation_recorder/","page":"Simulation Recorder","title":"Simulation Recorder","text":"using PowerSimulations\nconst PSI = PowerSimulations","category":"page"},{"location":"modeler_guide/simulation_recorder/","page":"Simulation Recorder","title":"Simulation Recorder","text":"Note that for all functions below you can optionally specify a function to filter events. The function must accept the event type and return true or false.","category":"page"},{"location":"modeler_guide/simulation_recorder/#Show-all-events-of-type-PSI.SimulationStepEvent","page":"Simulation Recorder","title":"Show all events of type PSI.SimulationStepEvent","text":"","category":"section"},{"location":"modeler_guide/simulation_recorder/","page":"Simulation Recorder","title":"Simulation Recorder","text":"julia> show_simulation_events(PSI.SimulationStepEvent, \"./output/aggregation/1\")\n┌─────────────────────┬─────────────────────┬──────┬────────┐\n│ name │ simulation_time │ step │ status │\n├─────────────────────┼─────────────────────┼──────┼────────┤\n│ SimulationStepEvent │ 2024-01-01T00:00:00 │ 1 │ start │\n│ SimulationStepEvent │ 2024-01-01T23:00:00 │ 1 │ done │\n│ SimulationStepEvent │ 2024-01-01T23:00:00 │ 2 │ start │\n│ SimulationStepEvent │ 2024-01-02T23:00:00 │ 2 │ done │\n└─────────────────────┴─────────────────────┴──────┴────────┘","category":"page"},{"location":"modeler_guide/simulation_recorder/#Show-events-of-type-PSI.ProblemExecutionEvent-for-a-specific-step-and-stage.","page":"Simulation Recorder","title":"Show events of type PSI.ProblemExecutionEvent for a specific step and stage.","text":"","category":"section"},{"location":"modeler_guide/simulation_recorder/","page":"Simulation Recorder","title":"Simulation Recorder","text":"show_simulation_events(\n PSI.ProblemExecutionEvent,\n \"./output/aggregation/1\",\n x -> x.step == 1 && x.stage == 2 && x.status == \"start\"\n)\n┌──────────────────────┬─────────────────────┬──────┬───────┬────────┐\n│ name │ simulation_time │ step │ stage │ status │\n├──────────────────────┼─────────────────────┼──────┼───────┼────────┤\n│ ProblemExecutionEvent │ 2024-01-01T00:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T00:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T01:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T02:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T03:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T04:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T05:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T06:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T07:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T08:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T09:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T10:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T11:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T12:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T13:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T14:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T15:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T16:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T17:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T18:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T19:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T20:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T21:00:00 │ 1 │ 2 │ start │\n│ ProblemExecutionEvent │ 2024-01-01T22:00:00 │ 1 │ 2 │ start │\n└──────────────────────┴─────────────────────┴──────┴───────┴────────┘","category":"page"},{"location":"modeler_guide/parallel_simulations/#Parallel-Simulations","page":"Parallel Simulations","title":"Parallel Simulations","text":"","category":"section"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"This section contains instructions to:","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Run a Simulation in Parallel on a local computer\nRun a Simulation in Parallel on an HPC","category":"page"},{"location":"modeler_guide/parallel_simulations/#Run-a-Simulation-in-Parallel-on-a-local-computer","page":"Parallel Simulations","title":"Run a Simulation in Parallel on a local computer","text":"","category":"section"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"This page describes how to split a simulation into partitions, run each partition in parallel, and then join the results.","category":"page"},{"location":"modeler_guide/parallel_simulations/#Setup","page":"Parallel Simulations","title":"Setup","text":"","category":"section"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Create a Julia script to build and run simulations. It must meet the requirements below. A full example is in the PowerSimulations repository in test/run_partitioned_simulation.jl.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Call using PowerSimulations.\nImplement a build function that matches the signature below. It must construct a Simulation, call build!, and then return the Simulation instance. It must throw an exception if the build fails.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"function build_simulation(\n output_dir::AbstractString,\n simulation_name::AbstractString,\n partitions::SimulationPartitions,\n index::Union{Nothing, Integer}=nothing,\n)","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Here is example code to construct the Simulation with these parameters:","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":" sim = Simulation(\n name=simulation_name,\n steps=partitions.num_steps,\n models=models,\n sequence=sequence,\n simulation_folder=output_dir,\n )\n status = build!(sim; partitions=partitions, index=index, serialize=isnothing(index))\n if status != PSI.SimulationBuildStatus.BUILT\n error(\"Failed to build simulation: status=$status\")\n end","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Implement an execute function that matches the signature below. It must throw an exception if the execute fails.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"function execute_simulation(sim, args...; kwargs...)\n status = execute!(sim)\n if status != PSI.RunStatus.SUCCESSFULLY_FINALIZED\n error(\"Simulation failed to execute: status=$status\")\n end\nend","category":"page"},{"location":"modeler_guide/parallel_simulations/#Execution","page":"Parallel Simulations","title":"Execution","text":"","category":"section"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"After loading your script, call the function run_parallel_simulation as shown below.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"This example splits a year-long simulation into weekly partitions for a total of 53 individual jobs and then runs them four at a time.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"julia> include(\"my_simulation.jl\")\njulia> run_parallel_simulation(\n build_simulation,\n execute_simulation,\n script=\"my_simulation.jl\",\n output_dir=\"my_simulation_output\",\n name=\"my_simulation\",\n num_steps=365,\n period=7,\n num_overlap_steps=1,\n num_parallel_processes=4,\n exeflags=\"--project=\",\n )","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"The final results will be in ./my_simulation_otuput/my_simulation","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Note the log files and results for each partition are located in ./my_simulation_otuput/my_simulation/simulation_partitions","category":"page"},{"location":"modeler_guide/parallel_simulations/#Run-a-Simulation-in-Parallel-on-an-HPC","page":"Parallel Simulations","title":"Run a Simulation in Parallel on an HPC","text":"","category":"section"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"This page describes how to split a simulation into partitions, run each partition in parallel on HPC compute nodes, and then join the results.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"These steps can be used on a local computer or any HPC supported by the submission software. Some steps may be specific to NREL's HPC Eagle cluster.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Note: Some instructions are preliminary and will change if functionality is moved to a new Julia package.","category":"page"},{"location":"modeler_guide/parallel_simulations/#Setup-2","page":"Parallel Simulations","title":"Setup","text":"","category":"section"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Create a conda environment and install the Python package NREL-jade: https://nrel.github.io/jade/installation.html. The rest of this page assumes that the environment is called jade.\nActivate the environment with conda activate jade.\nLocate the path to that conda environment. It will likely be ~/.conda-envs/jade or ~/.conda/envs/jade.\nLoad the Julia environment that you use to run simulations. Add the packages Conda and PyCall.\nSetup Conda to use the existing jade environment by running these commands:","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"julia> run(`conda create -n conda_jl python conda`)\njulia> ENV[\"CONDA_JL_HOME\"] = joinpath(ENV[\"HOME\"], \".conda-envs\", \"jade\") # change this to your path\npkg> build Conda","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Copy the code below into a Julia file called configure_parallel_simulation.jl. This is an interface to Jade through PyCall. It will be used to create a Jade configuration. (It may eventually be moved to a separate package.)","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"function configure_parallel_simulation(\n script::AbstractString,\n num_steps::Integer,\n num_period_steps::Integer;\n num_overlap_steps::Integer=0,\n project_path=nothing,\n simulation_name=\"simulation\",\n config_file=\"config.json\",\n force=false,\n)\n partitions = SimulationPartitions(num_steps, num_period_steps, num_overlap_steps)\n jgc = pyimport(\"jade.extensions.generic_command\")\n julia_cmd = isnothing(project_path) ? \"julia\" : \"julia --project=$project_path\"\n setup_command = \"$julia_cmd $script setup --simulation-name=$simulation_name \" *\n \"--num-steps=$num_steps --num-period-steps=$num_period_steps \" *\n \"--num-overlap-steps=$num_overlap_steps\"\n teardown_command = \"$julia_cmd $script join --simulation-name=$simulation_name\"\n config = jgc.GenericCommandConfiguration(\n setup_command=setup_command,\n teardown_command=teardown_command,\n )\n\n for i in 1:get_num_partitions(partitions)\n cmd = \"$julia_cmd $script execute --simulation-name=$simulation_name --index=$i\"\n job = jgc.GenericCommandParameters(command=cmd, name=\"execute-$i\")\n config.add_job(job)\n end\n\n config.dump(config_file, indent=2)\n println(\"Created Jade configuration in $config_file. \" *\n \"Run 'jade submit-jobs [options] $config_file' to execute them.\")\nend","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Create a Julia script to build and run simulations. It must meet the requirements below. A full example is in the PowerSimulations repository in test/run_partitioned_simulation.jl.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Call using PowerSimulations.\nImplement a build function that matches the signature below. It must construct a Simulation, call build!, and then return the Simulation instance. It must throw an exception if the build fails.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"function build_simulation(\n output_dir::AbstractString,\n simulation_name::AbstractString,\n partitions::SimulationPartitions,\n index::Union{Nothing, Integer}=nothing,\n)","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Here is example code to construct the Simulation with these parameters:","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":" sim = Simulation(\n name=simulation_name,\n steps=partitions.num_steps,\n models=models,\n sequence=sequence,\n simulation_folder=output_dir,\n )\n status = build!(sim; partitions=partitions, index=index, serialize=isnothing(index))\n if status != PSI.SimulationBuildStatus.BUILT\n error(\"Failed to build simulation: status=$status\")\n end","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Implement an execute function that matches the signature below. It must throw an exception if the execute fails.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"function execute_simulation(sim, args...; kwargs...)\n status = execute!(sim)\n if status != PSI.RunStatus.SUCCESSFULLY_FINALIZED\n error(\"Simulation failed to execute: status=$status\")\n end\nend","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Make the script runnable as a CLI command by including the following code at the bottom of the","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"file.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"function main()\n process_simulation_partition_cli_args(build_simulation, execute_simulation, ARGS...)\nend\n\nif abspath(PROGRAM_FILE) == @__FILE__\n main()\nend","category":"page"},{"location":"modeler_guide/parallel_simulations/#Execution-2","page":"Parallel Simulations","title":"Execution","text":"","category":"section"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Create a Jade configuration that defines the partitioned simulation jobs. Load your Julia environment.\nThis example splits a year-long simulation into weekly partitions for a total of 53 individual jobs.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"julia> include(\"configure_parallel_simulation.jl\")\njulia> num_steps = 365\njulia> period = 7\njulia> num_overlap_steps = 1\njulia> configure_parallel_simulation(\n \"my_simulation.jl\", # this is your build/execute script\n num_steps,\n period,\n num_overlap_steps=1,\n project_path=\".\", # This optionally specifies the Julia project environment to load.\n)\nCreated Jade configuration in config.json. Run 'jade submit-jobs [options] config.json' to execute them.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Exit Julia.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"View the configuration for accuracy.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"$ jade config show config.json","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Start an interactive session on a debug node. Do not submit the jobs on a login node! The submission step will run a full build of the simulation and that may consume too many CPU and memory resources for the login node.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"$ salloc -t 01:00:00 -N1 --account= --partition=debug","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Follow the instructions at https://nrel.github.io/jade/tutorial.html to submit the jobs. The example below will configure Jade to run each partition on its own compute node. Depending on the compute and memory constraints of your simulation, you may be able to pack more jobs on each node.\nAdjust the walltime as necessary.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"$ jade config hpc -c hpc_config.toml -t slurm --walltime=04:00:00 -a \n$ jade submit-jobs config.json --per-node-batch-size=1 -o output","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"If you are unsure about how much memory and CPU resources your simulation consumes, add these options:","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"$ jade submit-jobs config.json --per-node-batch-size=1 -o output --resource-monitor-type periodic --resource-monitor-interval 3","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Jade will create HTML plots of the resource utilization in output/stats. You may be able to customize --per-node-batch-size and --num-processes to finish the simulations more quickly.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Jade will run a final command to join the simulation partitions into one unified file. You can load the results as you normally would.","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"julia> results = SimulationResults(\"/job-outputs/\")","category":"page"},{"location":"modeler_guide/parallel_simulations/","page":"Parallel Simulations","title":"Parallel Simulations","text":"Note the log files and results for each partition are located in /job-outputs//simulation_partitions","category":"page"},{"location":"quick_start_guide/#Quick-Start-Guide","page":"Quick Start Guide","title":"Quick Start Guide","text":"","category":"section"},{"location":"quick_start_guide/","page":"Quick Start Guide","title":"Quick Start Guide","text":"Julia: If this is your first time using Julia visit our Introduction to Julia and the official Getting started with Julia.\nPackage Installation: If you want to install packages check the Package Manager instructions, or you can refer to the PowerSimulations installation instructions.\nPowerSystems: PowerSystems.jl manages the data and is a fundamental dependency of PowerSimulations.jl. Check the PowerSystems.jl Basics Tutorial and PowerSystems.jl documentation to understand how the inputs to the models are organized.\nDataset Library: If you don't have a data set to start using PowerSimulations.jl check the test systems provided in PowerSystemCaseBuilder.jl","category":"page"},{"location":"quick_start_guide/","page":"Quick Start Guide","title":"Quick Start Guide","text":"tip: Tip\nIf you need to develop a dataset for a simulation check the PowerSystems.jl Tutorials on how to parse data and attach time series","category":"page"},{"location":"quick_start_guide/","page":"Quick Start Guide","title":"Quick Start Guide","text":"Tutorial: If you are eager to run your first simulation visit the Solve a Day Ahead Market Scheduling Problem using PowerSimulations.jl tutorial","category":"page"},{"location":"code_base_developer_guide/troubleshooting/#Troubleshooting-code-development","page":"Troubleshooting","title":"Troubleshooting code development","text":"","category":"section"},{"location":"formulation_library/Piecewise/#pwl_cost","page":"Piecewise Linear Cost","title":"Piecewise linear cost functions","text":"","category":"section"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"The choice for piecewise-linear (PWL) cost representation in PowerSimulations.jl is equivalent to the so-called λ-model from the paper The Impacts of Convex Piecewise Linear Cost Formulations on AC Optimal Power Flow. The SOS constraints in each model are only implemented if the data for PWL is not convex.","category":"page"},{"location":"formulation_library/Piecewise/#Special-Ordered-Set-(SOS)-Constraints","page":"Piecewise Linear Cost","title":"Special Ordered Set (SOS) Constraints","text":"","category":"section"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"A special ordered set (SOS) is an ordered set of variables used as an additional way to specify integrality conditions in an optimization model.","category":"page"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"Special Ordered Sets of type 1 (SOS1) are a set of variables, at most one of which can take a non-zero value, all others being at 0. They most frequently applications is in a a set of variables that are actually binary variables: in other words, we have to choose at most one from a set of possibilities.\nSpecial Ordered Sets of type 2 (SOS2) are an ordered set of non-negative variables, of which at most two can be non-zero, and if two are non-zero these must be consecutive in their ordering. Special Ordered Sets of type 2 are typically used to model non-linear functions of a variable in a linear model, such as non-convex quadratic functions using PWL functions.","category":"page"},{"location":"formulation_library/Piecewise/#Standard-representation-of-PWL-costs","page":"Piecewise Linear Cost","title":"Standard representation of PWL costs","text":"","category":"section"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"Piecewise-linear costs are defined by a sequence of points representing the line segments for each generator: (P_k^textmax C_k) on which we assume C_k is the cost of generating P_k^textmax power, and k in 1dots K are the number of segments each generator cost function has.","category":"page"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"note: Note\nPowerSystems has more options to specify cost functions for each thermal unit. Independent of which form of the cost data is provided, PowerSimulations.jl will internally transform the data to use the λ-model formulation. See TODO: ADD PSY COST DOCS for more information.","category":"page"},{"location":"formulation_library/Piecewise/#Commitment-formulation","page":"Piecewise Linear Cost","title":"Commitment formulation","text":"","category":"section"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"With this the standard representation of PWL costs for a thermal unit commitment is given by:","category":"page"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"beginalign*\n min_substackp_t delta_kt\n sum_t in mathcalT left(sum_k in mathcalK C_kt delta_kt right) Delta t\n sum_k in mathcalK P_k^textmax delta_kt = p_t forall t in mathcalT\n sum_k in mathcalK delta_kt = u_t forall t in mathcalT\n P^textmin u_t leq p_t leq P^textmax u_t forall t in mathcalT\n left delta_1t dots delta_Kt right in textSOS_2 forall t in mathcalT\nendalign*","category":"page"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"on which delta_kt in 01 is the interpolation variable, p is the active power of the generator and u in 01 is the commitment variable of the generator. In the case of a PWL convex costs, i.e. increasing slopes, the SOS constraint is omitted.","category":"page"},{"location":"formulation_library/Piecewise/#Dispatch-formulation","page":"Piecewise Linear Cost","title":"Dispatch formulation","text":"","category":"section"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"beginalign*\n min_substackp_t delta_kt\n sum_t in mathcalT left(sum_k in mathcalK C_kt delta_kt right) Delta t\n sum_k in mathcalK P_k^textmax delta_kt = p_t forall t in mathcalT\n sum_k in mathcalK delta_kt = texton_t forall t in mathcalT\n P^textmin texton_t leq p_t leq P^textmax texton_t forall t in mathcalT\n left delta_it dots delta_kt right in textSOS_2 forall t in mathcalT\nendalign*","category":"page"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"on which delta_kt in 01 is the interpolation variable, p is the active power of the generator and texton in 01 is the parameter that decides if the generator is available or not. In the case of a PWL convex costs, i.e. increasing slopes, the SOS constraint is omitted.","category":"page"},{"location":"formulation_library/Piecewise/#Compact-representation-of-PWL-costs","page":"Piecewise Linear Cost","title":"Compact representation of PWL costs","text":"","category":"section"},{"location":"formulation_library/Piecewise/#Commitment-Formulation","page":"Piecewise Linear Cost","title":"Commitment Formulation","text":"","category":"section"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"beginalign*\n min_substackp_t delta_kt\n sum_t in mathcalT left(sum_k in mathcalK C_kt delta_kt right) Delta t\n sum_k in mathcalK P_k^textmax delta_kt = P^textmin u_t + Delta p_t forall t in mathcalT\n sum_k in mathcalK delta_kt = u_t forall t in mathcalT\n 0 leq Delta p_t leq left( P^textmax - P^textmin right)u_t forall t in mathcalT\n left delta_it dots delta_kt right in textSOS_2 forall t in mathcalT\nendalign*","category":"page"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"on which delta_kt in 01 is the interpolation variable, Delta p is the active power of the generator above the minimum power and u in 01 is the commitment variable of the generator. In the case of a PWL convex costs, i.e. increasing slopes, the SOS constraint is omitted.","category":"page"},{"location":"formulation_library/Piecewise/#Dispatch-formulation-2","page":"Piecewise Linear Cost","title":"Dispatch formulation","text":"","category":"section"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"beginalign*\n min_substackp_t delta_kt\n sum_t in mathcalT left(sum_k in mathcalK C_kt delta_kt right) Delta t\n sum_k in mathcalK P_k^textmax delta_kt = P^textmin texton_t + Delta p_t forall t in mathcalT\n sum_k in mathcalK delta_kt = texton_t forall t in mathcalT\n 0 leq Delta p_t leq left( P^textmax - P^textmin right)texton_t forall t in mathcalT\n left delta_it dots delta_kt right in textSOS_2 forall t in mathcalT\nendalign*","category":"page"},{"location":"formulation_library/Piecewise/","page":"Piecewise Linear Cost","title":"Piecewise Linear Cost","text":"on which delta_kt in 01 is the interpolation variable, Delta p is the active power of the generator above the minimum power and u in 01 is the commitment variable of the generator. In the case of a PWL convex costs, i.e. increasing slopes, the SOS constraint is omitted.","category":"page"},{"location":"tutorials/decision_problem/#op_problem_tutorial","page":"Single-step Problem","title":"Operations problems with PowerSimulations.jl","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"Originally Contributed by: Clayton Barrows","category":"page"},{"location":"tutorials/decision_problem/#Introduction","page":"Single-step Problem","title":"Introduction","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"PowerSimulations.jl supports the construction and solution of optimal power system scheduling problems (Operations Problems). Operations problems form the fundamental building blocks for sequential simulations. This example shows how to specify and customize a the mathematics that will be applied to the data with an ProblemTemplate, build and execute an DecisionModel, and access the results.","category":"page"},{"location":"tutorials/decision_problem/#Load-Packages","page":"Single-step Problem","title":"Load Packages","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"using PowerSystems\nusing PowerSimulations\nusing HydroPowerSimulations\nusing PowerSystemCaseBuilder\nusing HiGHS # solver\nusing Dates","category":"page"},{"location":"tutorials/decision_problem/#Data","page":"Single-step Problem","title":"Data","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"note: Note\nPowerSystemCaseBuilder.jl is a helper library that makes it easier to reproduce examples in the documentation and tutorials. Normally you would pass your local files to create the system data instead of calling the function build_system. For more details visit PowerSystemCaseBuilder Documentation","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"sys = build_system(PSISystems, \"modified_RTS_GMLC_DA_sys\")","category":"page"},{"location":"tutorials/decision_problem/#Define-a-problem-specification-with-an-ProblemTemplate","page":"Single-step Problem","title":"Define a problem specification with an ProblemTemplate","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"You can create an empty template with:","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"template_uc = ProblemTemplate()","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"Now, you can add a DeviceModel for each device type to create an assignment between PowerSystems device types and the subtypes of AbstractDeviceFormulation. PowerSimulations has a variety of different AbstractDeviceFormulation subtypes that can be applied to different PowerSystems device types, each dispatching to different methods for populating optimization problem objectives, variables, and constraints. Documentation on the formulation options for various devices can be found in the formulation library docs","category":"page"},{"location":"tutorials/decision_problem/#Branch-Formulations","page":"Single-step Problem","title":"Branch Formulations","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"Here is an example of relatively standard branch formulations. Other formulations allow for selective enforcement of transmission limits and greater control on transformer settings.","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"set_device_model!(template_uc, Line, StaticBranch)\nset_device_model!(template_uc, Transformer2W, StaticBranch)\nset_device_model!(template_uc, TapTransformer, StaticBranch)","category":"page"},{"location":"tutorials/decision_problem/#Injection-Device-Formulations","page":"Single-step Problem","title":"Injection Device Formulations","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"Here we define template entries for all devices that inject or withdraw power on the network. For each device type, we can define a distinct AbstractDeviceFormulation. In this case, we're defining a basic unit commitment model for thermal generators, curtailable renewable generators, and fixed dispatch (net-load reduction) formulations for HydroDispatch and RenewableNonDispatch devices.","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"set_device_model!(template_uc, ThermalStandard, ThermalStandardUnitCommitment)\nset_device_model!(template_uc, RenewableDispatch, RenewableFullDispatch)\nset_device_model!(template_uc, PowerLoad, StaticPowerLoad)\nset_device_model!(template_uc, HydroDispatch, HydroDispatchRunOfRiver)\nset_device_model!(template_uc, RenewableNonDispatch, FixedOutput)","category":"page"},{"location":"tutorials/decision_problem/#Service-Formulations","page":"Single-step Problem","title":"Service Formulations","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"We have two VariableReserve types, parameterized by their direction. So, similar to creating DeviceModels, we can create ServiceModels. The primary difference being that DeviceModel objects define how constraints get created, while ServiceModel objects define how constraints get modified.","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"set_service_model!(template_uc, VariableReserve{ReserveUp}, RangeReserve)\nset_service_model!(template_uc, VariableReserve{ReserveDown}, RangeReserve)","category":"page"},{"location":"tutorials/decision_problem/#Network-Formulations","page":"Single-step Problem","title":"Network Formulations","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"Finally, we can define the transmission network specification that we'd like to model. For simplicity, we'll choose a copper plate formulation. But there are dozens of specifications available through an integration with PowerModels.jl. Note that many formulations will require appropriate data and may be computationally intractable","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"set_network_model!(template_uc, NetworkModel(CopperPlatePowerModel))","category":"page"},{"location":"tutorials/decision_problem/#DecisionModel","page":"Single-step Problem","title":"DecisionModel","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"Now that we have a System and an ProblemTemplate, we can put the two together to create an DecisionModel that we solve.","category":"page"},{"location":"tutorials/decision_problem/#Optimizer","page":"Single-step Problem","title":"Optimizer","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"It's most convenient to define an optimizer instance upfront and pass it into the DecisionModel constructor. For this example, we can use the free HiGHS solver with a relatively relaxed MIP gap (ratioGap) setting to improve speed.","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"solver = optimizer_with_attributes(HiGHS.Optimizer, \"mip_rel_gap\" => 0.5)","category":"page"},{"location":"tutorials/decision_problem/#Build-an-DecisionModel","page":"Single-step Problem","title":"Build an DecisionModel","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"The construction of an DecisionModel essentially applies an ProblemTemplate to System data to create a JuMP model.","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"problem = DecisionModel(template_uc, sys; optimizer = solver, horizon = Hour(24))\nbuild!(problem, output_dir = mktempdir())","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"tip: Tip\nThe principal component of the DecisionModel is the JuMP model. But you can serialize to a file using the following command: serialize_optimization_model(problem, save_path)Keep in mind that if the setting \"storevariablenames\" is set to False then the file won't show the model's names.","category":"page"},{"location":"tutorials/decision_problem/#Solve-an-DecisionModel","page":"Single-step Problem","title":"Solve an DecisionModel","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"solve!(problem)","category":"page"},{"location":"tutorials/decision_problem/#Results-Inspection","page":"Single-step Problem","title":"Results Inspection","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"PowerSimulations collects the DecisionModel results into a OptimizationProblemResults struct:","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"res = OptimizationProblemResults(problem)","category":"page"},{"location":"tutorials/decision_problem/#Optimizer-Stats","page":"Single-step Problem","title":"Optimizer Stats","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"The optimizer summary is included","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"get_optimizer_stats(res)","category":"page"},{"location":"tutorials/decision_problem/#Objective-Function-Value","page":"Single-step Problem","title":"Objective Function Value","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"get_objective_value(res)","category":"page"},{"location":"tutorials/decision_problem/#Variable,-Parameter,-Auxillary-Variable,-Dual,-and-Expression-Values","page":"Single-step Problem","title":"Variable, Parameter, Auxillary Variable, Dual, and Expression Values","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"The solution value data frames for variables, parameters, auxillary variables, duals and expressions can be accessed using the read_ methods:","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"read_variables(res)","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"Or, you can read a single parameter values for parameters that exist in the results.","category":"page"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"list_parameter_names(res)\nread_parameter(res, \"ActivePowerTimeSeriesParameter__RenewableDispatch\")","category":"page"},{"location":"tutorials/decision_problem/#Plotting","page":"Single-step Problem","title":"Plotting","text":"","category":"section"},{"location":"tutorials/decision_problem/","page":"Single-step Problem","title":"Single-step Problem","text":"Take a look at the plotting capabilities in PowerGraphics.jl","category":"page"},{"location":"modeler_guide/tips_and_tricks/#Tips-and-tricks","page":"Tips and tricks","title":"Tips and tricks","text":"","category":"section"},{"location":"formulation_library/ThermalGen/#ThermalGen-Formulations","page":"Thermal Generation","title":"ThermalGen Formulations","text":"","category":"section"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Thermal generation formulations define the optimization models that describe thermal units mathematical model in different operational settings, such as economic dispatch and unit commitment.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"note: Note\nThermal units can include multiple terms added to the objective function, such as no-load cost, turn-on/off cost, fixed cost and variable cost. In addition, variable costs can be linear, quadratic or piecewise-linear formulations. These methods are properly described in the cost function page. ","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"note: Note\nThe use of reactive power variables and constraints will depend on the network model used, i.e., whether it uses (or does not use) reactive power. If the network model is purely active power-based, reactive power variables and related constraints are not created.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"note: Note\nReserve variables for services are not included in the formulation, albeit their inclusion change the variables, expressions, constraints and objective functions created. A detailed description of the implications in the optimization models is described in the Service formulation section.","category":"page"},{"location":"formulation_library/ThermalGen/#Table-of-Contents","page":"Thermal Generation","title":"Table of Contents","text":"","category":"section"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ThermalBasicDispatch\nThermalDispatchNoMin\nThermalCompactDispatch\nThermalStandardDispatch\nThermalBasicUnitCommitment\nThermalBasicCompactUnitCommitment\nThermalStandardUnitCommitment\nThermalMultiStartUnitCommitment\nValid configurations","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"","category":"page"},{"location":"formulation_library/ThermalGen/#ThermalBasicDispatch","page":"Thermal Generation","title":"ThermalBasicDispatch","text":"","category":"section"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ThermalBasicDispatch","category":"page"},{"location":"formulation_library/ThermalGen/#PowerSimulations.ThermalBasicDispatch","page":"Thermal Generation","title":"PowerSimulations.ThermalBasicDispatch","text":"Formulation type to enable basic dispatch without any intertemporal (ramp) constraints\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ActivePowerVariable:\nBounds: [0.0, ]\nSymbol: p^textth\nReactivePowerVariable:\nBounds: [0.0, ]\nSymbol: q^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Static Parameters:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"P^textthmin = PowerSystems.get_active_power_limits(device).min\nP^textthmax = PowerSystems.get_active_power_limits(device).max\nQ^textthmin = PowerSystems.get_reactive_power_limits(device).min\nQ^textthmax = PowerSystems.get_reactive_power_limits(device).max","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Objective:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Expressions:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Adds p^textth to the ActivePowerBalance expression and q^textth to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Constraints:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n P^textthmin le p^textth_t le P^textthmax quad forall tin 1 dots T \n Q^textthmin le q^textth_t le Q^textthmax quad forall tin 1 dots T \nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"","category":"page"},{"location":"formulation_library/ThermalGen/#ThermalDispatchNoMin","page":"Thermal Generation","title":"ThermalDispatchNoMin","text":"","category":"section"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ThermalDispatchNoMin","category":"page"},{"location":"formulation_library/ThermalGen/#PowerSimulations.ThermalDispatchNoMin","page":"Thermal Generation","title":"PowerSimulations.ThermalDispatchNoMin","text":"Formulation type to enable basic dispatch without any intertemporal constraints and relaxed minimum generation. May not work with non-convex PWL cost definitions\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ActivePowerVariable:\nBounds: [0.0, ]\nSymbol: p^textth\nReactivePowerVariable:\nBounds: [0.0, ]\nSymbol: q^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Static Parameters:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"P^textthmax = PowerSystems.get_active_power_limits(device).max\nQ^textthmin = PowerSystems.get_reactive_power_limits(device).min\nQ^textthmax = PowerSystems.get_reactive_power_limits(device).max","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Objective:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Expressions:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Adds p^textth to the ActivePowerBalance expression and q^textth to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Constraints:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign\n 0 le p^textth_t le P^textthmax quad forall tin 1 dots T \n Q^textthmin le q^textth_t le Q^textthmax quad forall tin 1 dots T \nendalign","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"","category":"page"},{"location":"formulation_library/ThermalGen/#ThermalCompactDispatch","page":"Thermal Generation","title":"ThermalCompactDispatch","text":"","category":"section"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ThermalCompactDispatch","category":"page"},{"location":"formulation_library/ThermalGen/#PowerSimulations.ThermalCompactDispatch","page":"Thermal Generation","title":"PowerSimulations.ThermalCompactDispatch","text":"Formulation type to enable thermal compact dispatch\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"PowerAboveMinimumVariable:\nBounds: [0.0, ]\nSymbol: Delta p^textth\nReactivePowerVariable:\nBounds: [0.0, ]\nSymbol: q^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Auxiliary Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"PowerOutput:\nSymbol: P^textth\nDefinition: P^textth = texton^textthP^textmin + Delta p^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Static Parameters:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"P^textthmin = PowerSystems.get_active_power_limits(device).min\nP^textthmax = PowerSystems.get_active_power_limits(device).max\nQ^textthmin = PowerSystems.get_reactive_power_limits(device).min\nQ^textthmax = PowerSystems.get_reactive_power_limits(device).max\nR^textthup = PowerSystems.get_ramp_limits(device).up\nR^textthdn = PowerSystems.get_ramp_limits(device).down","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Variable Value Parameters:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"texton^textth: Used in feedforwards to define if the unit is on/off at each time-step from another problem. If no feedforward is used, the parameter takes a {0,1} value if the unit is available or not.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Objective:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Expressions:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Adds texton^textthP^textthmin + Delta p^textth to the ActivePowerBalance expression and q^textth to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Constraints:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters. It also implements ramp constraints for the active power variable.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n 0 le Delta p^textth_t le texton^textth_tleft(P^textthmax - P^textthminright) quad forall tin 1 dots T \n texton^textth_t Q^textthmin le q^textth_t le texton^textth_t Q^textthmax quad forall tin 1 dots T \n -R^textthdn le Delta p_1^textth - Delta p^textth init le R^textthup \n -R^textthdn le Delta p_t^textth - Delta p_t-1^textth le R^textthup quad forall tin 2 dots T\nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"","category":"page"},{"location":"formulation_library/ThermalGen/#ThermalStandardDispatch","page":"Thermal Generation","title":"ThermalStandardDispatch","text":"","category":"section"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ThermalStandardDispatch","category":"page"},{"location":"formulation_library/ThermalGen/#PowerSimulations.ThermalStandardDispatch","page":"Thermal Generation","title":"PowerSimulations.ThermalStandardDispatch","text":"Formulation type to enable standard dispatch with a range and enforce intertemporal ramp constraints\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ActivePowerVariable:\nBounds: [0.0, ]\nSymbol: p^textth\nReactivePowerVariable:\nBounds: [0.0, ]\nSymbol: q^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Static Parameters:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"P^textthmin = PowerSystems.get_active_power_limits(device).min\nP^textthmax = PowerSystems.get_active_power_limits(device).max\nQ^textthmin = PowerSystems.get_reactive_power_limits(device).min\nQ^textthmax = PowerSystems.get_reactive_power_limits(device).max\nR^textthup = PowerSystems.get_ramp_limits(device).up\nR^textthdn = PowerSystems.get_ramp_limits(device).down","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Objective:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Expressions:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Adds p^textth to the ActivePowerBalance expression and q^textth to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Constraints:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n P^textthmin le p^textth_t le P^textthmax quad forall tin 1 dots T \n Q^textthmin le q^textth_t le Q^textthmax quad forall tin 1 dots T \n -R^textthdn le p_1^textth - p^textth init le R^textthup \n -R^textthdn le p_t^textth - p_t-1^textth le R^textthup quad forall tin 2 dots T\nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"","category":"page"},{"location":"formulation_library/ThermalGen/#ThermalBasicUnitCommitment","page":"Thermal Generation","title":"ThermalBasicUnitCommitment","text":"","category":"section"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ThermalBasicUnitCommitment","category":"page"},{"location":"formulation_library/ThermalGen/#PowerSimulations.ThermalBasicUnitCommitment","page":"Thermal Generation","title":"PowerSimulations.ThermalBasicUnitCommitment","text":"Formulation type to enable basic unit commitment representation without any intertemporal (ramp, min on/off time) constraints\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ActivePowerVariable:\nBounds: [0.0, ]\nSymbol: p^textth\nReactivePowerVariable:\nBounds: [0.0, ]\nSymbol: q^textth\nOnVariable:\nBounds: 01\nSymbol: u_t^textth\nStartVariable:\nBounds: 01\nSymbol: v_t^textth\nStopVariable:\nBounds: 01\nSymbol: w_t^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Static Parameters:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"P^textthmin = PowerSystems.get_active_power_limits(device).min\nP^textthmax = PowerSystems.get_active_power_limits(device).max\nQ^textthmin = PowerSystems.get_reactive_power_limits(device).min\nQ^textthmax = PowerSystems.get_reactive_power_limits(device).max","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Objective:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Expressions:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Adds p^textth to the ActivePowerBalance expression and q^textth to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Constraints:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters. In addition, it creates the commitment constraint to turn on/off the device.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n u_t^textth P^textthmin le p^textth_t le u_t^textth P^textthmax quad forall tin 1 dots T \n u_t^textth Q^textthmin le q^textth_t le u_t^textth Q^textthmax quad forall tin 1 dots T \n u_1^textth = u^textthinit + v_1^textth - w_1^textth \n u_t^textth = u_t-1^textth + v_t^textth - w_t^textth quad forall t in 2dotsT \n v_t^textth + w_t^textth le 1 quad forall t in 1dotsT\nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"","category":"page"},{"location":"formulation_library/ThermalGen/#ThermalBasicCompactUnitCommitment","page":"Thermal Generation","title":"ThermalBasicCompactUnitCommitment","text":"","category":"section"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ThermalBasicCompactUnitCommitment","category":"page"},{"location":"formulation_library/ThermalGen/#PowerSimulations.ThermalBasicCompactUnitCommitment","page":"Thermal Generation","title":"PowerSimulations.ThermalBasicCompactUnitCommitment","text":"Formulation type to enable thermal compact commitment without intertemporal (ramp, min on/off time) constraints\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"PowerAboveMinimumVariable:\nBounds: [0.0, ]\nSymbol: Delta p^textth\nReactivePowerVariable:\nBounds: [0.0, ]\nSymbol: q^textth\nOnVariable:\nBounds: 01\nSymbol: u_t^textth\nStartVariable:\nBounds: 01\nSymbol: v_t^textth\nStopVariable:\nBounds: 01\nSymbol: w_t^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Auxiliary Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"PowerOutput:\nSymbol: P^textth\nDefinition: P^textth = u^textthP^textmin + Delta p^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Static Parameters:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"P^textthmin = PowerSystems.get_active_power_limits(device).min\nP^textthmax = PowerSystems.get_active_power_limits(device).max\nQ^textthmin = PowerSystems.get_reactive_power_limits(device).min\nQ^textthmax = PowerSystems.get_reactive_power_limits(device).max","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Objective:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Expressions:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Adds u^textthP^textthmin + Delta p^textth to the ActivePowerBalance expression and q^textth to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Constraints:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters. In addition, it creates the commitment constraint to turn on/off the device.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n 0 le Delta p^textth_t le u^textth_tleft(P^textthmax - P^textthminright) quad forall tin 1 dots T \n u_t^textth Q^textthmin le q^textth_t le u_t^textth Q^textthmax quad forall tin 1 dots T \n u_1^textth = u^textthinit + v_1^textth - w_1^textth \n u_t^textth = u_t-1^textth + v_t^textth - w_t^textth quad forall t in 2dotsT \n v_t^textth + w_t^textth le 1 quad forall t in 1dotsT\nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"","category":"page"},{"location":"formulation_library/ThermalGen/#ThermalCompactUnitCommitment","page":"Thermal Generation","title":"ThermalCompactUnitCommitment","text":"","category":"section"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ThermalCompactUnitCommitment","category":"page"},{"location":"formulation_library/ThermalGen/#PowerSimulations.ThermalCompactUnitCommitment","page":"Thermal Generation","title":"PowerSimulations.ThermalCompactUnitCommitment","text":"Formulation type to enable thermal compact commitment\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"PowerAboveMinimumVariable:\nBounds: [0.0, ]\nSymbol: Delta p^textth\nReactivePowerVariable:\nBounds: [0.0, ]\nSymbol: q^textth\nOnVariable:\nBounds: 01\nSymbol: u_t^textth\nStartVariable:\nBounds: 01\nSymbol: v_t^textth\nStopVariable:\nBounds: 01\nSymbol: w_t^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Auxiliary Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"PowerOutput:\nSymbol: P^textth\nDefinition: P^textth = u^textthP^textmin + Delta p^textth\nTimeDurationOn:\nSymbol: V_t^textth\nDefinition: Computed post optimization by adding consecutive turned on variable u_t^textth\nTimeDurationOff:\nSymbol: W_t^textth\nDefinition: Computed post optimization by adding consecutive turned off variable 1 - u_t^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Static Parameters:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"P^textthmin = PowerSystems.get_active_power_limits(device).min\nP^textthmax = PowerSystems.get_active_power_limits(device).max\nQ^textthmin = PowerSystems.get_reactive_power_limits(device).min\nQ^textthmax = PowerSystems.get_reactive_power_limits(device).max\nR^textthup = PowerSystems.get_ramp_limits(device).up\nR^textthdn = PowerSystems.get_ramp_limits(device).down\nD^textminup = PowerSystems.get_time_limits(device).up\nD^textmindn = PowerSystems.get_time_limits(device).down","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Objective:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Expressions:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Adds u^textthP^textthmin + Delta p^textth to the ActivePowerBalance expression and q^textth to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Constraints:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters. It also creates the commitment constraint to turn on/off the device.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n 0 le Delta p^textth_t le u^textth_tleft(P^textthmax - P^textthminright) quad forall tin 1 dots T \n u_t^textth Q^textthmin le q^textth_t le u_t^textth Q^textthmax quad forall tin 1 dots T \n -R^textthdn le Delta p_1^textth - Delta p^textth init le R^textthup \n -R^textthdn le Delta p_t^textth - Delta p_t-1^textth le R^textthup quad forall tin 2 dots T \n u_1^textth = u^textthinit + v_1^textth - w_1^textth \n u_t^textth = u_t-1^textth + v_t^textth - w_t^textth quad forall t in 2dotsT \n v_t^textth + w_t^textth le 1 quad forall t in 1dotsT \nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"In addition, this formulation adds duration constraints, i.e. minimum-up time and minimum-down time constraints. The duration constraints are added over the start times looking backwards.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"The duration times D^textminup and D^textmindn are processed to be used in multiple of the time-steps, given the resolution of the specific problem. In addition, parameters D^textinitup and D^textinitdn are used to identify how long the unit was on or off, respectively, before the simulation started.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Minimum up-time constraint for t in 1dots T:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n textIf t leq D^textminup - D^textinitup text and D^textinitup 0 \n 1 + sum_i=t-D^textminup + 1^t v_i^textth leq u_t^textth quad text(for i text in the set of time steps) \n textOtherwise \n sum_i=t-D^textminup + 1^t v_i^textth leq u_t^textth \nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Minimum down-time constraint for t in 1dots T:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n textIf t leq D^textmindn - D^textinitdn text and D^textinitup 0 \n 1 + sum_i=t-D^textmindn + 1^t w_i^textth leq 1 - u_t^textth quad text(for i text in the set of time steps) \n textOtherwise \n sum_i=t-D^textmindn + 1^t w_i^textth leq 1 - u_t^textth\nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"","category":"page"},{"location":"formulation_library/ThermalGen/#ThermalStandardUnitCommitment","page":"Thermal Generation","title":"ThermalStandardUnitCommitment","text":"","category":"section"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ThermalStandardUnitCommitment","category":"page"},{"location":"formulation_library/ThermalGen/#PowerSimulations.ThermalStandardUnitCommitment","page":"Thermal Generation","title":"PowerSimulations.ThermalStandardUnitCommitment","text":"Formulation type to enable standard unit commitment with intertemporal constraints and simplified startup profiles\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ActivePowerVariable:\nBounds: [0.0, ]\nSymbol: p^textth\nReactivePowerVariable:\nBounds: [0.0, ]\nSymbol: q^textth\nOnVariable:\nBounds: 01\nSymbol: u_t^textth\nStartVariable:\nBounds: 01\nSymbol: v_t^textth\nStopVariable:\nBounds: 01\nSymbol: w_t^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Auxiliary Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"TimeDurationOn:\nSymbol: V_t^textth\nDefinition: Computed post optimization by adding consecutive turned on variable u_t^textth\nTimeDurationOff:\nSymbol: W_t^textth\nDefinition: Computed post optimization by adding consecutive turned off variable 1 - u_t^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Static Parameters:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"P^textthmin = PowerSystems.get_active_power_limits(device).min\nP^textthmax = PowerSystems.get_active_power_limits(device).max\nQ^textthmin = PowerSystems.get_reactive_power_limits(device).min\nQ^textthmax = PowerSystems.get_reactive_power_limits(device).max\nR^textthup = PowerSystems.get_ramp_limits(device).up\nR^textthdn = PowerSystems.get_ramp_limits(device).down\nD^textminup = PowerSystems.get_time_limits(device).up\nD^textmindn = PowerSystems.get_time_limits(device).down","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Objective:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Expressions:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Adds p^textth to the ActivePowerBalance expression and q^textth to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Constraints:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters. It also creates the commitment constraint to turn on/off the device.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n u^textth_t P^textthmin le p^textth_t le u^textth_t P^textthmax quad forall tin 1 dots T \n u_t^textth Q^textthmin le q^textth_t le u_t^textth Q^textthmax quad forall tin 1 dots T \n -R^textthdn le p_1^textth - p^textth init le R^textthup \n -R^textthdn le p_t^textth - p_t-1^textth le R^textthup quad forall tin 2 dots T \n u_1^textth = u^textthinit + v_1^textth - w_1^textth \n u_t^textth = u_t-1^textth + v_t^textth - w_t^textth quad forall t in 2dotsT \n v_t^textth + w_t^textth le 1 quad forall t in 1dotsT \nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"In addition, this formulation adds duration constraints, i.e. minimum-up time and minimum-down time constraints. The duration constraints are added over the start times looking backwards.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"The duration times D^textminup and D^textmindn are processed to be used in multiple of the time-steps, given the resolution of the specific problem. In addition, parameters D^textinitup and D^textinitdn are used to identify how long the unit was on or off, respectively, before the simulation started.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Minimum up-time constraint for t in 1dots T:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n textIf t leq D^textminup - D^textinitup text and D^textinitup 0 \n 1 + sum_i=t-D^textminup + 1^t v_i^textth leq u_t^textth quad text(for i text in the set of time steps) \n textOtherwise \n sum_i=t-D^textminup + 1^t v_i^textth leq u_t^textth \nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Minimum down-time constraint for t in 1dots T:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n textIf t leq D^textmindn - D^textinitdn text and D^textinitup 0 \n 1 + sum_i=t-D^textmindn + 1^t w_i^textth leq 1 - u_t^textth quad text(for i text in the set of time steps) \n textOtherwise \n sum_i=t-D^textmindn + 1^t w_i^textth leq 1 - u_t^textth\nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"","category":"page"},{"location":"formulation_library/ThermalGen/#ThermalMultiStartUnitCommitment","page":"Thermal Generation","title":"ThermalMultiStartUnitCommitment","text":"","category":"section"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"ThermalMultiStartUnitCommitment","category":"page"},{"location":"formulation_library/ThermalGen/#PowerSimulations.ThermalMultiStartUnitCommitment","page":"Thermal Generation","title":"PowerSimulations.ThermalMultiStartUnitCommitment","text":"Formulation type to enable pg-lib commitment formulation with startup/shutdown profiles\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"PowerAboveMinimumVariable:\nBounds: [0.0, ]\nSymbol: Delta p^textth\nReactivePowerVariable:\nBounds: [0.0, ]\nSymbol: q^textth\nOnVariable:\nBounds: 01\nSymbol: u_t^textth\nStartVariable:\nBounds: 01\nSymbol: v_t^textth\nStopVariable:\nBounds: 01\nSymbol: w_t^textth\nColdStartVariable:\nBounds: 01\nSymbol: x_t^textth\nWarmStartVariable:\nBounds: 01\nSymbol: y_t^textth\nHotStartVariable:\nBounds: 01\nSymbol: z_t^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Auxiliary Variables:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"PowerOutput:\nSymbol: P^textth\nDefinition: P^textth = u^textthP^textmin + Delta p^textth\nTimeDurationOn:\nSymbol: V_t^textth\nDefinition: Computed post optimization by adding consecutive turned on variable u_t^textth\nTimeDurationOff:\nSymbol: W_t^textth\nDefinition: Computed post optimization by adding consecutive turned off variable 1 - u_t^textth","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Static Parameters:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"P^textthmin = PowerSystems.get_active_power_limits(device).min\nP^textthmax = PowerSystems.get_active_power_limits(device).max\nQ^textthmin = PowerSystems.get_reactive_power_limits(device).min\nQ^textthmax = PowerSystems.get_reactive_power_limits(device).max\nR^textthup = PowerSystems.get_ramp_limits(device).up\nR^textthdn = PowerSystems.get_ramp_limits(device).down\nD^textminup = PowerSystems.get_time_limits(device).up\nD^textmindn = PowerSystems.get_time_limits(device).down\nD^textcold = PowerSystems.get_start_time_limits(device).cold\nD^textwarm = PowerSystems.get_start_time_limits(device).warm\nD^texthot = PowerSystems.get_start_time_limits(device).hot\nP^textthstartup = PowerSystems.get_power_trajectory(device).startup\nP^textth shdown = PowerSystems.get_power_trajectory(device).shutdown","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Objective:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Add a cost to the objective function depending on the defined cost structure of the thermal unit by adding it to its ProductionCostExpression.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Expressions:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Adds u^textthP^textthmin + Delta p^textth to the ActivePowerBalance expression and q^textth to the ReactivePowerBalance, to be used in the supply-balance constraint depending on the network model used.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Constraints:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"For each thermal unit creates the range constraints for its active and reactive power depending on its static parameters. It also creates the commitment constraint to turn on/off the device.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n 0 le Delta p^textth_t le u^textth_tleft(P^textthmax - P^textthminright) quad forall tin 1 dots T \n u_t^textth Q^textthmin le q^textth_t le u_t^textth Q^textthmax quad forall tin 1 dots T \n -R^textthdn le Delta p_1^textth - Delta p^textth init le R^textthup \n -R^textthdn le Delta p_t^textth - Delta p_t-1^textth le R^textthup quad forall tin 2 dots T \n u_1^textth = u^textthinit + v_1^textth - w_1^textth \n u_t^textth = u_t-1^textth + v_t^textth - w_t^textth quad forall t in 2dotsT \n v_t^textth + w_t^textth le 1 quad forall t in 1dotsT \n maxP^textthmax - P^textthshdown 0 cdot w_1^textth le u^textthinit (P^textthmax - P^textthmin) - P^textthinit\nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"In addition, this formulation adds duration constraints, i.e. minimum-up time and minimum-down time constraints. The duration constraints are added over the start times looking backwards.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"The duration times D^textminup and D^textmindn are processed to be used in multiple of the time-steps, given the resolution of the specific problem. In addition, parameters D^textinitup and D^textinitdn are used to identify how long the unit was on or off, respectively, before the simulation started.","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Minimum up-time constraint for t in 1dots T:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n textIf t leq D^textminup - D^textinitup text and D^textinitup 0 \n 1 + sum_i=t-D^textminup + 1^t v_i^textth leq u_t^textth quad text(for i text in the set of time steps) \n textOtherwise \n sum_i=t-D^textminup + 1^t v_i^textth leq u_t^textth \nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Minimum down-time constraint for t in 1dots T:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n textIf t leq D^textmindn - D^textinitdn text and D^textinitup 0 \n 1 + sum_i=t-D^textmindn + 1^t w_i^textth leq 1 - u_t^textth quad text(for i text in the set of time steps) \n textOtherwise \n sum_i=t-D^textmindn + 1^t w_i^textth leq 1 - u_t^textth\nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Finally, multi temperature start/stop constraints are implemented using the following constraints:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"beginalign*\n v_t^textth = x_t^textth + y_t^textth + z_t^textth quad forall t in 1 dots T \n z_t^textth le sum_i in D^texthot D^textwarm)w_t-i^textth quad forall t in D^textwarm dots T \n y_t^textth le sum_i in D^textwarm D^textcold)w_t-i^textth quad forall t in D^textcold dots T \n (D^textwarm - 1) z_t^textth + (1 - z_t^textth) M^textbig ge sum_i=1^t (1 - u_i^textth) + D^textinithot quad forall t in 1 dots T \n D^texthot z_t^textth le sum_i=1^t (1 - u_i^textth) + D^textinithot quad forall t in 1 dots T \n (D^textcold - 1) y_t^textth + (1 - y_t^textth) M^textbig ge sum_i=1^t (1 - u_i^textth) + D^textinitwarm quad forall t in 1 dots T \n D^textwarm y_t^textth le sum_i=1^t (1 - u_i^textth) + D^textinitwarm quad forall t in 1 dots T \nendalign*","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"","category":"page"},{"location":"formulation_library/ThermalGen/#Valid-configurations","page":"Thermal Generation","title":"Valid configurations","text":"","category":"section"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"Valid DeviceModels for subtypes of ThermalGen include the following:","category":"page"},{"location":"formulation_library/ThermalGen/","page":"Thermal Generation","title":"Thermal Generation","text":"using PowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombos = PowerSimulations.generate_device_formulation_combinations()\nfilter!(x -> x[\"device_type\"] <: ThermalGen, combos)\ncombo_table = DataFrame(\n \"Valid DeviceModel\" => [\"`DeviceModel($(c[\"device_type\"]), $(c[\"formulation\"]))`\" for c in combos],\n \"Device Type\" => [\"[$(c[\"device_type\"])](https://nrel-Sienna.github.io/PowerSystems.jl/stable/model_library/generated_$(c[\"device_type\"])/)\" for c in combos],\n \"Formulation\" => [\"[$(c[\"formulation\"])](@ref)\" for c in combos],\n )\nmdtable(combo_table, latex = false)","category":"page"},{"location":"tutorials/adding_new_problem_model/#Adding-an-Operations-Problem-Model","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"","category":"section"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"This tutorial will show how to create a custom decision problem model. These cases are the ones where the user want to solve a fully specified problem. Some examples of custom decision models include:","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"Solving a custom Security Constrained Unit Commitment Problem\nSolving a market agent utility maximization Problem. See examples of this functionality in HybridSystemsSimulations.jl","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"The tutorial follows the usual steps for operational model building. First, build the decision model in isolation and second, integrate it into a simulation. In most cases there will be more than one way of achieving the same objective when it comes to implementing the model. This guide shows a general set of steps and requirements but it is by no means an exhaustive and detailed guide on developing custom decision models.","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"warning: Warning\nAll the code in this tutorial is considered \"pseudo-code\". Copy-paste will likely not work out of the box. You need to develop the internals of the functions correctly for the examples below to work.","category":"page"},{"location":"tutorials/adding_new_problem_model/#General-Rules","page":"Adding an Operations Problem Model","title":"General Rules","text":"","category":"section"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"As a general rule you need to understand Julia's terminology such as multiple dispatch, parametric structs and method overloading, among others. Developing custom models for an operational simulation is a highly technical task and requires skilled development. This tutorial also requires good understanding of PowerSystems.jl data structures and features which are covered in the tutorials section of PowerSystems.jl documentation.","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"Finally, developing a custom model decision model that will employ an optimization model under the hood requires understanding JuMP.jl.","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"Need to employ anonymous constraints and variables in JuMP","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"and register the constraints, variables and other optimization objects into PowerSimulations.jl's optimization container. Otherwise the features to use your problem in the simulation like the coordination with other problems and post processing won't work. More on this in the section How to develop your build_model! function below.","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"Implement the required methods for your custom decision models. In some cases it will be possible to re-use some of the other methods that exist in PowerSimulations to make life easier for variable addition and constraint creation but this is not required.","category":"page"},{"location":"tutorials/adding_new_problem_model/#Decision-Problem","page":"Adding an Operations Problem Model","title":"Decision Problem","text":"","category":"section"},{"location":"tutorials/adding_new_problem_model/#Step-1:-Define-a-Custom-Decision-Problem","page":"Adding an Operations Problem Model","title":"Step 1: Define a Custom Decision Problem","text":"","category":"section"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"Define a decision problem struct as a subtype of PowerSimulations.DecisionProblem. This requirement will enable a lot of the underlying functionality that relies on multiple dispatch. DecisionProblems are used to parameterize the behavior of DecisionModel objects which are just containers for the parameters, references and the optimization problem.","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"It is possible to define a Custom Decision Problem that gives the user full control over the build, solve and execution process since it imposes less requirements on the developer. However, with less requirements there are also less checks and validations performed inside of PowerSimulations which might lead to unexpected errors","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"struct MyCustomDecisionProblem <: PSI.DecisionProblem end","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"Alternatively, it is possible to define a Custom Decision Problem subtyping from DefaultDecisionProblem which imposes more requirements and structure onto the developer but employs more checks and validations in the process. Be aware that this route will decrease the flexibility of what can be done inside the custom model.","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"struct MyCustomDecisionProblem <: PSI.DefaultDecisionProblem end","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"Once the problem type is defined, initialize the decision model container with your custom decision problem passing the solver and some of the settings you need for the solution of the problem. For custom problems some of the settings need manual implementation by the developer. Settings availability is also dependent on wether you choose to subtype from PSI.DecisionProblem or PSI.DefaultDecisionProblem","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"my_model = DecisionModel{MyCustomDecisionProblem}(\n sys;\n name = \"MyModel\",\n optimizer = optimizer_with_attributes(HiGHS.Optimizer),\n optimizer_solve_log_print = true,\n)","category":"page"},{"location":"tutorials/adding_new_problem_model/#Mandatory-Method-Implementations","page":"Adding an Operations Problem Model","title":"Mandatory Method Implementations","text":"","category":"section"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"build_model!: This method build the JuMP optimization model.","category":"page"},{"location":"tutorials/adding_new_problem_model/#Optional-Method-Overloads","page":"Adding an Operations Problem Model","title":"Optional Method Overloads","text":"","category":"section"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"These methods can be defined optionally for your problem. By default for problems subtyped from DecisionProblem these checks are not executed. If the problems are subtyped from DefaultDecisionProblem these checks are always conducted with PowerSimulations defaults and require compliance with those defaults to pass. In any case, these can be overloaded when necessary depending on the problem requirements.","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"validate_template\nvalidate_time_series!\nreset!\nsolve_impl!","category":"page"},{"location":"tutorials/adding_new_problem_model/#How-to-develop-your-build_model!-function","page":"Adding an Operations Problem Model","title":"How to develop your build_model! function","text":"","category":"section"},{"location":"tutorials/adding_new_problem_model/#Registering-a-variable-in-the-model","page":"Adding an Operations Problem Model","title":"Registering a variable in the model","text":"","category":"section"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"To register a variable in the model, the developer must first allocate the container into the optimization container and then populate it. For example, it require start the build function as follows:","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"info: Info\nWe recommend calling import PowerSimulations and defining the constant CONST PSI = PowerSimulations to make it easier to read the code and determine which package is responsible for defining the functions.","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":" function PSI.build_model!(model::PSI.DecisionModel{MyCustomDecisionProblem})\n container = PSI.get_optimization_container(model)\n time_steps = 1:24\n PSI.set_time_steps!(container, time_steps)\n system = PSI.get_system(model)\n\n thermal_gens = PSY.get_components(PSY.ThermalStandard, system)\n thermal_gens_names = PSY.get_name.(thermal_gens)\n\n # Create the container for the variable\n variable = PSI.add_variable_container!(\n container,\n PSI.ActivePowerVariable(), # <- This variable is defined in PowerSimulations but the user can define their own\n PSY.ThermalGeneration, # <- Device type for the variable. Can be from PSY or custom defined\n thermal_gens_names, # <- First container dimension\n time_steps, # <- Second container dimension\n )\n\n # Iterate over the devices and time to store the JuMP variables into the container.\n for t in time_steps, d in thermal_gens_names\n name = PSY.get_name(d)\n variable[name, t] = JuMP.@variable(get_jump_model(container))\n # It is possible to use PSY getter functions to retrieve data from the generators\n JuMP.set_upper_bound(variable[name, t], UB_DATA) # <- Optional\n JuMP.set_lower_bound(variable[name, t], LB_DATA) # <- Optional\n end\n\n # Add More Variables.....\n\n return\n end","category":"page"},{"location":"tutorials/adding_new_problem_model/#Registering-a-constraint-in-the-model","page":"Adding an Operations Problem Model","title":"Registering a constraint in the model","text":"","category":"section"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":"A similar pattern is used to add constraints to the model, in this example the field meta is used to avoid creating unnecessary duplicate constraint types. For instance to reflect upperbound and lowerbound or upwards and downwards constraints. Meta can take any string value except for the _ character.","category":"page"},{"location":"tutorials/adding_new_problem_model/","page":"Adding an Operations Problem Model","title":"Adding an Operations Problem Model","text":" function PSI.build_model!(model::PSI.DecisionModel{MyCustomDecisionProblem})\n container = PSI.get_optimization_container(model)\n time_steps = 1:24\n PSI.set_time_steps!(container, time_steps)\n system = PSI.get_system(model)\n\n # VARIABLE ADDITION CODE\n\n # Constraint additions\n con_ub = PSI.add_constraints_container!(\n container,\n PSI.RangeLimitConstraint(), # <- Constraint Type defined by PSI or your own\n PSY.ThermalGeneration, # <- Device type for variable. Can be PSY or custom\n thermal_gens_names, # <- First container dimension\n time_steps; # <- Second container dimension\n meta = \"ub\" # <- meta allows to reuse a constraint definition for similar constraints. It only requires to be a string\n )\n\n con_lb = PSI.add_constraints_container!(\n container,\n PSI.RangeLimitConstraint(),\n PSY.ThermalGeneration,\n thermal_gens_names, # <- First container dimension\n time_steps; # <- Second container dimension\n meta = \"lb\" # <- meta allows to reuse a constraint definition for similar constraints. It only requires to be a string\n )\n\n # Retrieve a relevant variable from the container if not defined in\n variable = PSI.get_variable(container, PSI.ActivePowerVariable(), PSY.ThermalGeneration)\n for device in devices, t in time_steps\n ci_name = PSY.get_name(device)\n limits = get_min_max_limits(device) # depends on constraint type and formulation type\n con_ub[ci_name, t] =\n JuMP.@constraint(get_jump_model(container), variable[ci_name, t] >= limits.min)\n con_lb[ci_name, t] =\n JuMP.@constraint(get_jump_model(container), variable[ci_name, t] >= limits.min)\n end\n\n return\n end","category":"page"},{"location":"formulation_library/Branch/#PowerSystems.Branch-Formulations","page":"Branch","title":"PowerSystems.Branch Formulations","text":"","category":"section"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"note: Note\nThe use of reactive power variables and constraints will depend on the network model used, i.e., whether it uses (or does not use) reactive power. If the network model is purely active power-based, reactive power variables and related constraints are not created.","category":"page"},{"location":"formulation_library/Branch/#Table-of-contents","page":"Branch","title":"Table of contents","text":"","category":"section"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"StaticBranch\nStaticBranchBounds\nStaticBranchUnbounded\nHVDCTwoTerminalUnbounded\nHVDCTwoTerminalLossless\nHVDCTwoTerminalDispatch\nPhaseAngleControl\nValid configurations","category":"page"},{"location":"formulation_library/Branch/#StaticBranch","page":"Branch","title":"StaticBranch","text":"","category":"section"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Formulation valid for PTDFPowerModel Network model","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"StaticBranch","category":"page"},{"location":"formulation_library/Branch/#PowerSimulations.StaticBranch","page":"Branch","title":"PowerSimulations.StaticBranch","text":"Branch type to add unbounded flow variables and use flow constraints\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Variables:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"FlowActivePowerVariable:\nBounds: (-inftyinfty)\nSymbol: f","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"If Slack variables are enabled:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"FlowActivePowerSlackUpperBound:\nBounds: [0.0, ]\nDefault proportional cost: 2e5\nSymbol: f^textslup\nFlowActivePowerSlackLowerBound:\nBounds: [0.0, ]\nDefault proportional cost: 2e5\nSymbol: f^textsllo","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Static Parameters","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"R^textmax = PowerSystems.get_rating(branch)","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Objective:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Add a large proportional cost to the objective function if rate constraint slack variables are used + (f^textslup + f^textsllo) cdot 2 cdot 10^5","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Expressions:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"No expressions are used.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Constraints:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"For each branch b in 1dots B (in a system with N buses) the constraints are given by: ","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"beginaligned\n f_t = sum_i=1^N textPTDF_ib cdot textBal_it quad forall t in 1dots T\n f_t - f_t^textslup le R^textmaxquad forall t in 1dots T \n f_t + f_t^textsllo ge -R^textmaxquad forall t in 1dots T \nendaligned","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"on which textPTDF is the N times B system Power Transfer Distribution Factors (PTDF) matrix, and textBal_it is the active power bus balance expression (i.e. textGeneration_it - textDemand_it) at bus i at time-step t. ","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"","category":"page"},{"location":"formulation_library/Branch/#StaticBranchBounds","page":"Branch","title":"StaticBranchBounds","text":"","category":"section"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Formulation valid for PTDFPowerModel Network model","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"StaticBranchBounds","category":"page"},{"location":"formulation_library/Branch/#PowerSimulations.StaticBranchBounds","page":"Branch","title":"PowerSimulations.StaticBranchBounds","text":"Branch type to add bounded flow variables and use flow constraints\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Variables:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"FlowActivePowerVariable:\nBounds: left-R^textmaxR^textmaxright\nSymbol: f","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Static Parameters","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"R^textmax = PowerSystems.get_rating(branch)","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Objective:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"No cost is added to the objective function.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Expressions:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"No expressions are used.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Constraints:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"For each branch b in 1dots B (in a system with N buses) the constraints are given by: ","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"beginaligned\n f_t = sum_i=1^N textPTDF_ib cdot textBal_it quad forall t in 1dots T\nendaligned","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"on which textPTDF is the N times B system Power Transfer Distribution Factors (PTDF) matrix, and textBal_it is the active power bus balance expression (i.e. textGeneration_it - textDemand_it) at bus i at time-step t. ","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"","category":"page"},{"location":"formulation_library/Branch/#StaticBranchUnbounded","page":"Branch","title":"StaticBranchUnbounded","text":"","category":"section"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Formulation valid for PTDFPowerModel Network model","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"StaticBranchUnbounded","category":"page"},{"location":"formulation_library/Branch/#PowerSimulations.StaticBranchUnbounded","page":"Branch","title":"PowerSimulations.StaticBranchUnbounded","text":"Branch type to avoid flow constraints\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"FlowActivePowerVariable:\nBounds: (-inftyinfty)\nSymbol: f","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Objective:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"No cost is added to the objective function.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Expressions:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"No expressions are used.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Constraints:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"For each branch b in 1dots B (in a system with N buses) the constraints are given by: ","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"beginaligned\n f_t = sum_i=1^N textPTDF_ib cdot textBal_it quad forall t in 1dots T\nendaligned","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"on which textPTDF is the N times B system Power Transfer Distribution Factors (PTDF) matrix, and textBal_it is the active power bus balance expression (i.e. textGeneration_it - textDemand_it) at bus i at time-step t. ","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"","category":"page"},{"location":"formulation_library/Branch/#HVDCTwoTerminalUnbounded","page":"Branch","title":"HVDCTwoTerminalUnbounded","text":"","category":"section"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Formulation valid for PTDFPowerModel Network model","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"HVDCTwoTerminalUnbounded","category":"page"},{"location":"formulation_library/Branch/#PowerSimulations.HVDCTwoTerminalUnbounded","page":"Branch","title":"PowerSimulations.HVDCTwoTerminalUnbounded","text":"Branch type to avoid flow constraints\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"This model assumes that it can transfer power from two AC buses without losses and no limits.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Variables:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"FlowActivePowerVariable:\nBounds: left(-inftyinftyright)\nSymbol: f","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Objective:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"No cost is added to the objective function.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Expressions:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"The variable FlowActivePowerVariable f is added to the nodal balance expression ActivePowerBalance, by adding the flow f in the receiving bus and subtracting it from the sending bus. This is used then to compute the AC flows using the PTDF equation.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Constraints:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"No constraints are added.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"","category":"page"},{"location":"formulation_library/Branch/#HVDCTwoTerminalLossless","page":"Branch","title":"HVDCTwoTerminalLossless","text":"","category":"section"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Formulation valid for PTDFPowerModel Network model","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"HVDCTwoTerminalLossless","category":"page"},{"location":"formulation_library/Branch/#PowerSimulations.HVDCTwoTerminalLossless","page":"Branch","title":"PowerSimulations.HVDCTwoTerminalLossless","text":"Branch type to represent lossless power flow on DC lines\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"This model assumes that it can transfer power from two AC buses without losses.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Variables:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"FlowActivePowerVariable:\nBounds: left(-inftyinftyright)\nSymbol: f","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Static Parameters","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"R^textfrommin = PowerSystems.get_active_power_limits_from(branch).min\nR^textfrommax = PowerSystems.get_active_power_limits_from(branch).max\nR^texttomin = PowerSystems.get_active_power_limits_to(branch).min\nR^texttomax = PowerSystems.get_active_power_limits_to(branch).max","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Objective:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"No cost is added to the objective function.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Expressions:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"The variable FlowActivePowerVariable f is added to the nodal balance expression ActivePowerBalance, by adding the flow f in the receiving bus and subtracting it from the sending bus. This is used then to compute the AC flows using the PTDF equation.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Constraints:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"beginalign*\n R^textmin le f_t le R^textmaxquad forall t in 1dots T \nendalign*","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"where:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"beginalign*\n R^textmin = begincases\n\t\t\tminleft(R^textfrommin R^texttominright) textif R^textfrommin ge 0 text and R^texttomin ge 0 \n maxleft(R^textfrommin R^texttominright) textif R^textfrommin le 0 text and R^texttomin le 0 \n R^textfrommin textif R^textfrommin le 0 text and R^texttomin ge 0 \n R^texttomin textif R^textfrommin ge 0 text and R^texttomin le 0\n\t\t endcases\nendalign*","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"and","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"beginalign*\n R^textmax = begincases\n\t\t\tminleft(R^textfrommax R^texttomaxright) textif R^textfrommax ge 0 text and R^texttomax ge 0 \n maxleft(R^textfrommax R^texttomaxright) textif R^textfrommax le 0 text and R^texttomax le 0 \n R^textfrommax textif R^textfrommax le 0 text and R^texttomax ge 0 \n R^texttomax textif R^textfrommax ge 0 text and R^texttomax le 0\n\t\t endcases\nendalign*","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"","category":"page"},{"location":"formulation_library/Branch/#HVDCTwoTerminalDispatch","page":"Branch","title":"HVDCTwoTerminalDispatch","text":"","category":"section"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Formulation valid for PTDFPowerModel Network model","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"HVDCTwoTerminalDispatch","category":"page"},{"location":"formulation_library/Branch/#PowerSimulations.HVDCTwoTerminalDispatch","page":"Branch","title":"PowerSimulations.HVDCTwoTerminalDispatch","text":"Branch type to represent lossy power flow on DC lines\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Variables","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"FlowActivePowerToFromVariable:\nSymbol: f^textto-from\nFlowActivePowerFromToVariable:\nSymbol: f^textfrom-to\nHVDCLosses:\nSymbol: ell\nHVDCFlowDirectionVariable\nBounds: 01\nSymbol: u^textdir","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Static Parameters","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"R^textfrommin = PowerSystems.get_active_power_limits_from(branch).min\nR^textfrommax = PowerSystems.get_active_power_limits_from(branch).max\nR^texttomin = PowerSystems.get_active_power_limits_to(branch).min\nR^texttomax = PowerSystems.get_active_power_limits_to(branch).max\nL_0 = PowerSystems.get_loss(branch).l0\nL_1 = PowerSystems.get_loss(branch).l1","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Objective:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"No cost is added to the objective function.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Expressions:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Each FlowActivePowerToFromVariable f^textto-from and FlowActivePowerFromToVariable f^textfrom-to is added to the nodal balance expression ActivePowerBalance, by adding the respective flow in the receiving bus and subtracting it from the sending bus. That is, f^textto-from adds the flow to the from bus, and subtracts the flow from the to bus, while f^textfrom-to adds the flow to the to bus, and subtracts the flow from the from bus This is used then to compute the AC flows using the PTDF equation.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"In addition, the HVDCLosses are subtracted to the from bus in the ActivePowerBalance expression. ","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Constraints:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"beginalign*\n R^textfrommin le f_t^textfrom-to le R^textfrommax forall t in 1dots T \n R^texttomin le f_t^textto-from le R^texttomaxquad forall t in 1dots T \n f_t^textto-from - f_t^textfrom-to le L_1 cdot f_t^textto-from - L_0quad forall t in 1dots T \n f_t^textfrom-to - f_t^textto-from ge L_1 cdot f_t^textfrom-to + L_0quad forall t in 1dots T \n f_t^textfrom-to - f_t^textto-from ge - M^textbig (1 - u^textdir_t)quad forall t in 1dots T \n f_t^textto-from - f_t^textfrom-to ge - M^textbig u^textdir_tquad forall t in 1dots T \n f_t^textto-from - f_t^textfrom-to le ell_tquad forall t in 1dots T \n f_t^textfrom-to - f_t^textto-from le ell_tquad forall t in 1dots T \nendalign*","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"","category":"page"},{"location":"formulation_library/Branch/#PhaseAngleControl","page":"Branch","title":"PhaseAngleControl","text":"","category":"section"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Formulation valid for PTDFPowerModel Network model","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"PhaseAngleControl","category":"page"},{"location":"formulation_library/Branch/#PowerSimulations.PhaseAngleControl","page":"Branch","title":"PowerSimulations.PhaseAngleControl","text":"Branch formulation for PhaseShiftingTransformer flow control\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Variables:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"FlowActivePowerVariable:\nBounds: (-inftyinfty)\nSymbol: f\nPhaseShifterAngle:\nSymbol: theta^textshift","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Static Parameters","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"R^textmax = PowerSystems.get_rating(branch)\nTheta^textmin = PowerSystems.get_phase_angle_limits(branch).min\nTheta^textmax = PowerSystems.get_phase_angle_limits(branch).max\nX = PowerSystems.get_x(branch) (series reactance)","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Objective:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"No changes to objective function","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Expressions:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Adds to the ActivePowerBalance expression the term -theta^textshift X to the from bus and +theta^textshift X to the to bus, that the PhaseShiftingTransformer is connected.","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Constraints:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"For each branch b in 1dots B (in a system with N buses) the constraints are given by: ","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"beginaligned\n f_t = sum_i=1^N textPTDF_ib cdot textBal_it + fractheta^textshift_tX quad forall t in 1dots T\n -R^textmax le f_t le R^textmaxquad forall t in 1dots T \nendaligned","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"on which textPTDF is the N times B system Power Transfer Distribution Factors (PTDF) matrix, and textBal_it is the active power bus balance expression (i.e. textGeneration_it - textDemand_it) at bus i at time-step t. ","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"","category":"page"},{"location":"formulation_library/Branch/#Valid-configurations","page":"Branch","title":"Valid configurations","text":"","category":"section"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"Valid DeviceModels for subtypes of Branch include the following:","category":"page"},{"location":"formulation_library/Branch/","page":"Branch","title":"Branch","text":"using PowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombos = PowerSimulations.generate_device_formulation_combinations()\nfilter!(x -> (x[\"device_type\"] <: Branch) && (x[\"device_type\"] != TModelHVDCLine), combos)\ncombo_table = DataFrame(\n \"Valid DeviceModel\" => [\"`DeviceModel($(c[\"device_type\"]), $(c[\"formulation\"]))`\" for c in combos],\n \"Device Type\" => [\"[$(c[\"device_type\"])](https://nrel-Sienna.github.io/PowerSystems.jl/stable/model_library/generated_$(c[\"device_type\"])/)\" for c in combos],\n \"Formulation\" => [\"[$(c[\"formulation\"])](@ref)\" for c in combos],\n )\nmdtable(combo_table, latex = false)","category":"page"},{"location":"modeler_guide/problem_templates/#op_problem_template","page":"Operations ProblemTemplates","title":"Operations ProblemTemplates","text":"","category":"section"},{"location":"modeler_guide/problem_templates/","page":"Operations ProblemTemplates","title":"Operations ProblemTemplates","text":"Templates are used to specify the modeling properties of the devices and network that are going to he used to specify a problem. A ProblemTemplate is just a collection of DeviceModels that allows the user to specify the formulations of each set of devices (by device type) independently so that the modeler can adjust the level of detail according to the question of interest and the available data. For more information about valid DeviceModels and their mathematical representations, check out the Formulation Library.","category":"page"},{"location":"modeler_guide/problem_templates/#Building-a-ProblemTemplate","page":"Operations ProblemTemplates","title":"Building a ProblemTemplate","text":"","category":"section"},{"location":"modeler_guide/problem_templates/","page":"Operations ProblemTemplates","title":"Operations ProblemTemplates","text":"You can build a ProblemTemplate by adding a NetworkModel, DeviceModels, and ServiceModels.","category":"page"},{"location":"modeler_guide/problem_templates/","page":"Operations ProblemTemplates","title":"Operations ProblemTemplates","text":"template = ProblemTemplate()\nset_network_model!(template, NetworkModel(CopperPlatePowerModel))\nset_device_model!(template, PowerLoad, StaticPowerLoad)\nset_device_model!(template, ThermalStandard, ThermalBasicUnitCommitment)\nset_service_model!(template, VariableReserve{ReserveUp}, RangeReserve)","category":"page"},{"location":"modeler_guide/problem_templates/#Default-Templates","page":"Operations ProblemTemplates","title":"Default Templates","text":"","category":"section"},{"location":"modeler_guide/problem_templates/","page":"Operations ProblemTemplates","title":"Operations ProblemTemplates","text":"PowerSimulations.jl provides default templates for common operation problems. You can retrieve a default template and modify it according to your requirements. Currently supported default templates are:","category":"page"},{"location":"modeler_guide/problem_templates/","page":"Operations ProblemTemplates","title":"Operations ProblemTemplates","text":"template_economic_dispatch","category":"page"},{"location":"modeler_guide/problem_templates/#PowerSimulations.template_economic_dispatch","page":"Operations ProblemTemplates","title":"PowerSimulations.template_economic_dispatch","text":"template_economic_dispatch(; kwargs...) -> ProblemTemplate\n\n\ntemplate_economic_dispatch(; kwargs...)\n\nCreates a ProblemTemplate with default DeviceModels for an Economic Dispatch problem.\n\nExample\n\ntemplate = templateeconomicdispatch()\n\n\n# Accepted Key Words\n- `network::Type{<:PM.AbstractPowerModel}` : override default network model settings\n- `devices::Vector{DeviceModel}` : override default `DeviceModel` settings\n- `services::Vector{ServiceModel}` : override default `ServiceModel` settings\n\n\n\n\n\n","category":"function"},{"location":"modeler_guide/problem_templates/","page":"Operations ProblemTemplates","title":"Operations ProblemTemplates","text":"using PowerSimulations #hide\ntemplate_economic_dispatch()","category":"page"},{"location":"modeler_guide/problem_templates/","page":"Operations ProblemTemplates","title":"Operations ProblemTemplates","text":"template_unit_commitment","category":"page"},{"location":"modeler_guide/problem_templates/#PowerSimulations.template_unit_commitment","page":"Operations ProblemTemplates","title":"PowerSimulations.template_unit_commitment","text":"template_unit_commitment(; kwargs...) -> ProblemTemplate\n\n\ntemplate_unit_commitment(; kwargs...)\n\nCreates a ProblemTemplate with default DeviceModels for a Unit Commitment problem.\n\nExample\n\ntemplate = templateunitcommitment()\n\n\n# Accepted Key Words\n- `network::Type{<:PM.AbstractPowerModel}` : override default network model settings\n- `devices::Vector{DeviceModel}` : override default `DeviceModel` settings\n- `services::Vector{ServiceModel}` : override default `ServiceModel` settings\n\n\n\n\n\n","category":"function"},{"location":"modeler_guide/problem_templates/","page":"Operations ProblemTemplates","title":"Operations ProblemTemplates","text":"using PowerSimulations #hide\ntemplate_unit_commitment()","category":"page"},{"location":"code_base_developer_guide/developer/#Guidelines-for-Developers","page":"Developer Guide","title":"Guidelines for Developers","text":"","category":"section"},{"location":"code_base_developer_guide/developer/","page":"Developer Guide","title":"Developer Guide","text":"In order to contribute to PowerSystems.jl repository please read the following sections of InfrastructureSystems.jl documentation in detail:","category":"page"},{"location":"code_base_developer_guide/developer/","page":"Developer Guide","title":"Developer Guide","text":"Style Guide\nContributing Guidelines","category":"page"},{"location":"code_base_developer_guide/developer/","page":"Developer Guide","title":"Developer Guide","text":"Pull requests are always welcome to fix bugs or add additional modeling capabilities.","category":"page"},{"location":"code_base_developer_guide/developer/","page":"Developer Guide","title":"Developer Guide","text":"All the code contributions need to include tests with a minimum coverage of 70%","category":"page"},{"location":"modeler_guide/modeling_faq/#Modeling-FAQ","page":"Modeling FAQ","title":"Modeling FAQ","text":"","category":"section"},{"location":"modeler_guide/modeling_faq/","page":"Modeling FAQ","title":"Modeling FAQ","text":"question: How do I reduce the amount of print on my REPL?\nThe print to the REPL is controlled with the logging. Check the Logging documentation page to see how to reduce the print out","category":"page"},{"location":"modeler_guide/modeling_faq/","page":"Modeling FAQ","title":"Modeling FAQ","text":"question: How do I print the optimizer logs to see the solution process?\nWhen specifying the DecisionModel or EmulationModel pass the keyword print_optimizer_log = true","category":"page"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"CurrentModule = PowerSimulations\nDocTestSetup = quote\n using PowerSimulations\nend","category":"page"},{"location":"api/PowerSimulations/#API-Reference","page":"API Reference","title":"API Reference","text":"","category":"section"},{"location":"api/PowerSimulations/#Table-of-Contents","page":"API Reference","title":"Table of Contents","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"Device Models\nFormulations\nProblem Templates\nDecision Models\nEmulation Models\nService Models\nSimulation Models\nVariables\nCommon Variables\nThermal Unit Variables\nStorage Unit Variables\nBranches and Network Variables\nServices Variables\nFeedforward Variables\nConstraints\nCommon Constraints\nNetwork Constraints\nPower Variable Limit Constraints\nServices Constraints\nThermal Unit Constraints\nRenewable Unit Constraints\nBranches Constraints\nFeedforward Constraints\nParameters\nTime Series Parameters\nVariable Value Parameters\nObjective Function Parameters","category":"page"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":" \n ","category":"page"},{"location":"api/PowerSimulations/#Device-Models","page":"API Reference","title":"Device Models","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"List of structures and methods for Device models","category":"page"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"DeviceModel","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.DeviceModel","page":"API Reference","title":"PowerSimulations.DeviceModel","text":"DeviceModel(\n ::Type{D},\n ::Type{B},\n feedforwards::Vector{<:AbstractAffectFeedforward}\n use_slacks::Bool,\n duals::Vector{DataType},\n services::Vector{ServiceModel}\n attributes::Dict{String, Any}\n)\n\nEstablishes the model for a particular device specified by type. Uses the keyword argument feedforward to enable passing values between operation model at simulation time\n\nArguments\n\n::Type{D} where D<:PSY.Device: Power System Device Type\n::Type{B} where B<:AbstractDeviceFormulation: Abstract Device Formulation\nfeedforward::Array{<:AbstractAffectFeedforward} = Vector{AbstractAffectFeedforward}() : use to pass parameters between models\nuse_slacks::Bool = false : Add slacks to the device model. Implementation is model dependent and not all models feature slacks\nduals::Vector{DataType} = Vector{DataType}(): use to pass constraint type to calculate the duals. The DataType needs to be a valid ConstraintType\ntime_series_names::Dict{Type{<:TimeSeriesParameter}, String} = get_default_time_series_names(D, B) : use to specify time series names associated to the device`\nattributes::Dict{String, Any} = get_default_attributes(D, B) : use to specify attributes to the device\n\nExample\n\nthermal_gens = DeviceModel(ThermalStandard, ThermalBasicUnitCommitment)\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Formulations","page":"API Reference","title":"Formulations","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"Refer to the Formulations Page for each Abstract Device Formulation.","category":"page"},{"location":"api/PowerSimulations/#Problem-Templates","page":"API Reference","title":"Problem Templates","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"Refer to the Problem Templates Page for available ProblemTemplates.","category":"page"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":" \n ","category":"page"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"","category":"page"},{"location":"api/PowerSimulations/#Decision-Models","page":"API Reference","title":"Decision Models","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"DecisionModel\nDecisionModel(::Type{M} where {M <: DecisionProblem}, ::ProblemTemplate, ::PSY.System, ::Union{Nothing, JuMP.Model})\nDecisionModel(::AbstractString, ::MOI.OptimizerWithAttributes)\nbuild!(::DecisionModel)\nsolve!(::DecisionModel)","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.DecisionModel","page":"API Reference","title":"PowerSimulations.DecisionModel","text":"DecisionModel{M}(\n template::AbstractProblemTemplate,\n sys::PSY.System,\n jump_model::Union{Nothing, JuMP.Model}=nothing;\n kwargs...) where {M<:DecisionProblem}\n\nBuild the optimization problem of type M with the specific system and template.\n\nArguments\n\n::Type{M} where M<:DecisionProblem: The abstract operation model type\ntemplate::AbstractProblemTemplate: The model reference made up of transmission, devices, branches, and services.\nsys::PSY.System: the system created using Power Systems\njump_model::Union{Nothing, JuMP.Model}: Enables passing a custom JuMP model. Use with care\nname = nothing: name of model, string or symbol; defaults to the type of template converted to a symbol.\noptimizer::Union{Nothing,MOI.OptimizerWithAttributes} = nothing : The optimizer does not get serialized. Callers should pass whatever they passed to the original problem.\nhorizon::Dates.Period = UNSET_HORIZON: Manually specify the length of the forecast Horizon\nresolution::Dates.Period = UNSET_RESOLUTION: Manually specify the model's resolution\nwarm_start::Bool = true: True will use the current operation point in the system to initialize variable values. False initializes all variables to zero. Default is true\nsystem_to_file::Bool = true:: True to create a copy of the system used in the model.\ninitialize_model::Bool = true: Option to decide to initialize the model or not.\ninitialization_file::String = \"\": This allows to pass pre-existing initialization values to avoid the solution of an optimization problem to find feasible initial conditions.\ndeserialize_initial_conditions::Bool = false: Option to deserialize conditions\nexport_pwl_vars::Bool = false: True to export all the pwl intermediate variables. It can slow down significantly the build and solve time.\nallow_fails::Bool = false: True to allow the simulation to continue even if the optimization step fails. Use with care.\noptimizer_solve_log_print::Bool = false: Uses JuMP.unset_silent() to print the optimizer's log. By default all solvers are set to MOI.Silent()\ndetailed_optimizer_stats::Bool = false: True to save detailed optimizer stats log.\ncalculate_conflict::Bool = false: True to use solver to calculate conflicts for infeasible problems. Only specific solvers are able to calculate conflicts.\ndirect_mode_optimizer::Bool = false: True to use the solver in direct mode. Creates a JuMP.direct_model.\nstore_variable_names::Bool = false: to store variable names in optimization model. Decreases the build times.\nrebuild_model::Bool = false: It will force the rebuild of the underlying JuMP model with each call to update the model. It increases solution times, use only if the model can't be updated in memory.\ninitial_time::Dates.DateTime = UNSET_INI_TIME: Initial Time for the model solve.\ntime_series_cache_size::Int = IS.TIME_SERIES_CACHE_SIZE_BYTES: Size in bytes to cache for each time array. Default is 1 MiB. Set to 0 to disable.\n\nExample\n\ntemplate = ProblemTemplate(CopperPlatePowerModel, devices, branches, services)\nOpModel = DecisionModel(MockOperationProblem, template, system)\n\n\n\n\n\nDecisionModel(\n ::Type{M<:PowerSimulations.DecisionProblem},\n template::PowerSimulations.AbstractProblemTemplate,\n sys::System;\n ...\n) -> DecisionModel\nDecisionModel(\n ::Type{M<:PowerSimulations.DecisionProblem},\n template::PowerSimulations.AbstractProblemTemplate,\n sys::System,\n jump_model::Union{Nothing, JuMP.Model};\n kwargs...\n) -> DecisionModel\n\n\nBuild the optimization problem of type M with the specific system and template\n\nArguments\n\n::Type{M} where M<:DecisionProblem: The abstract operation model type\ntemplate::AbstractProblemTemplate: The model reference made up of transmission, devices, branches, and services.\nsys::PSY.System: the system created using Power Systems\njump_model::Union{Nothing, JuMP.Model} = nothing: Enables passing a custom JuMP model. Use with care.\n\nExample\n\ntemplate = ProblemTemplate(CopperPlatePowerModel, devices, branches, services)\nproblem = DecisionModel(MyOpProblemType, template, system, optimizer)\n\n\n\n\n\nBuilds an empty decision model. This constructor is used for the implementation of custom decision models that do not require a template.\n\nArguments\n\n::Type{M} where M<:DecisionProblem: The abstract operation model type\nsys::PSY.System: the system created using Power Systems\njump_model::Union{Nothing, JuMP.Model} = nothing: Enables passing a custom JuMP model. Use with care.\n\nExample\n\nproblem = DecisionModel(system, optimizer)\n\n\n\n\n\nDecisionModel(\n directory::AbstractString,\n optimizer::MathOptInterface.OptimizerWithAttributes;\n jump_model,\n system\n) -> Any\n\n\nConstruct an DecisionProblem from a serialized file.\n\nArguments\n\ndirectory::AbstractString: Directory containing a serialized model\njump_model::Union{Nothing, JuMP.Model} = nothing: The JuMP model does not get serialized. Callers should pass whatever they passed to the original problem.\noptimizer::Union{Nothing,MOI.OptimizerWithAttributes} = nothing: The optimizer does not get serialized. Callers should pass whatever they passed to the original problem.\nsystem::Union{Nothing, PSY.System}: Optionally, the system used for the model. If nothing and systofile was set to true when the model was created, the system will be deserialized from a file.\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.DecisionModel-Tuple{Type{M} where M<:PowerSimulations.DecisionProblem, ProblemTemplate, System, Union{Nothing, JuMP.Model}}","page":"API Reference","title":"PowerSimulations.DecisionModel","text":"DecisionModel(\n ::Type{M<:PowerSimulations.DecisionProblem},\n template::PowerSimulations.AbstractProblemTemplate,\n sys::System;\n ...\n) -> DecisionModel\nDecisionModel(\n ::Type{M<:PowerSimulations.DecisionProblem},\n template::PowerSimulations.AbstractProblemTemplate,\n sys::System,\n jump_model::Union{Nothing, JuMP.Model};\n kwargs...\n) -> DecisionModel\n\n\nBuild the optimization problem of type M with the specific system and template\n\nArguments\n\n::Type{M} where M<:DecisionProblem: The abstract operation model type\ntemplate::AbstractProblemTemplate: The model reference made up of transmission, devices, branches, and services.\nsys::PSY.System: the system created using Power Systems\njump_model::Union{Nothing, JuMP.Model} = nothing: Enables passing a custom JuMP model. Use with care.\n\nExample\n\ntemplate = ProblemTemplate(CopperPlatePowerModel, devices, branches, services)\nproblem = DecisionModel(MyOpProblemType, template, system, optimizer)\n\n\n\n\n\n","category":"method"},{"location":"api/PowerSimulations/#PowerSimulations.DecisionModel-Tuple{AbstractString, MathOptInterface.OptimizerWithAttributes}","page":"API Reference","title":"PowerSimulations.DecisionModel","text":"DecisionModel(\n directory::AbstractString,\n optimizer::MathOptInterface.OptimizerWithAttributes;\n jump_model,\n system\n) -> Any\n\n\nConstruct an DecisionProblem from a serialized file.\n\nArguments\n\ndirectory::AbstractString: Directory containing a serialized model\njump_model::Union{Nothing, JuMP.Model} = nothing: The JuMP model does not get serialized. Callers should pass whatever they passed to the original problem.\noptimizer::Union{Nothing,MOI.OptimizerWithAttributes} = nothing: The optimizer does not get serialized. Callers should pass whatever they passed to the original problem.\nsystem::Union{Nothing, PSY.System}: Optionally, the system used for the model. If nothing and systofile was set to true when the model was created, the system will be deserialized from a file.\n\n\n\n\n\n","category":"method"},{"location":"api/PowerSimulations/#PowerSimulations.build!-Tuple{DecisionModel}","page":"API Reference","title":"PowerSimulations.build!","text":"build!(\n model::DecisionModel;\n output_dir,\n recorders,\n console_level,\n file_level,\n disable_timer_outputs\n)\n\n\nBuild the Decision Model based on the specified DecisionProblem.\n\nArguments\n\nmodel::DecisionModel{<:DecisionProblem}: DecisionModel object\noutput_dir::String: Output directory for results\nrecorders::Vector{Symbol} = []: recorder names to register\nconsole_level = Logging.Error:\nfile_level = Logging.Info:\ndisable_timer_outputs = false : Enable/Disable timing outputs\n\n\n\n\n\n","category":"method"},{"location":"api/PowerSimulations/#PowerSimulations.solve!-Tuple{DecisionModel}","page":"API Reference","title":"PowerSimulations.solve!","text":"solve!(\n model::DecisionModel;\n export_problem_results,\n console_level,\n file_level,\n disable_timer_outputs,\n serialize,\n kwargs...\n) -> InfrastructureSystems.Simulation.RunStatusModule.RunStatus\n\n\nDefault solve method for models that conform to the requirements of DecisionModel{<: DecisionProblem}.\n\nThis will call build! on the model if it is not already built. It will forward all keyword arguments to that function.\n\nArguments\n\nmodel::OperationModel = model: operation model\nexport_problem_results::Bool = false: If true, export OptimizationProblemResults DataFrames to CSV files. Reduces solution times during simulation.\nconsole_level = Logging.Error:\nfile_level = Logging.Info:\ndisable_timer_outputs = false : Enable/Disable timing outputs\nserialize::Bool = true: If true, serialize the model to a file to allow re-execution later.\n\nExamples\n\nresults = solve!(OpModel)\nresults = solve!(OpModel, export_problem_results = true)\n\n\n\n\n\n","category":"method"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":" \n ","category":"page"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"","category":"page"},{"location":"api/PowerSimulations/#Emulation-Models","page":"API Reference","title":"Emulation Models","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"EmulationModel\nEmulationModel(::Type{M} where {M <: EmulationProblem}, ::ProblemTemplate, ::PSY.System, ::Union{Nothing, JuMP.Model})\nEmulationModel(::AbstractString, ::MOI.OptimizerWithAttributes)\nbuild!(::EmulationModel)\nrun!(::EmulationModel)","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.EmulationModel","page":"API Reference","title":"PowerSimulations.EmulationModel","text":"EmulationModel{M}(\n template::AbstractProblemTemplate,\n sys::PSY.System,\n jump_model::Union{Nothing, JuMP.Model}=nothing;\n kwargs...) where {M<:EmulationProblem}\n\nBuild the optimization problem of type M with the specific system and template.\n\nArguments\n\n::Type{M} where M<:EmulationProblem: The abstract Emulation model type\ntemplate::AbstractProblemTemplate: The model reference made up of transmission, devices, branches, and services.\nsys::PSY.System: the system created using Power Systems\njump_model::Union{Nothing, JuMP.Model}: Enables passing a custom JuMP model. Use with care\nname = nothing: name of model, string or symbol; defaults to the type of template converted to a symbol.\noptimizer::Union{Nothing,MOI.OptimizerWithAttributes} = nothing : The optimizer does not get serialized. Callers should pass whatever they passed to the original problem.\nwarm_start::Bool = true: True will use the current operation point in the system to initialize variable values. False initializes all variables to zero. Default is true\nsystem_to_file::Bool = true:: True to create a copy of the system used in the model.\ninitialize_model::Bool = true: Option to decide to initialize the model or not.\ninitialization_file::String = \"\": This allows to pass pre-existing initialization values to avoid the solution of an optimization problem to find feasible initial conditions.\ndeserialize_initial_conditions::Bool = false: Option to deserialize conditions\nexport_pwl_vars::Bool = false: True to export all the pwl intermediate variables. It can slow down significantly the build and solve time.\nallow_fails::Bool = false: True to allow the simulation to continue even if the optimization step fails. Use with care.\ncalculate_conflict::Bool = false: True to use solver to calculate conflicts for infeasible problems. Only specific solvers are able to calculate conflicts.\noptimizer_solve_log_print::Bool = false: Uses JuMP.unset_silent() to print the optimizer's log. By default all solvers are set to MOI.Silent()\ndetailed_optimizer_stats::Bool = false: True to save detailed optimizer stats log.\ndirect_mode_optimizer::Bool = false: True to use the solver in direct mode. Creates a JuMP.direct_model.\nstore_variable_names::Bool = false: True to store variable names in optimization model.\nrebuild_model::Bool = false: It will force the rebuild of the underlying JuMP model with each call to update the model. It increases solution times, use only if the model can't be updated in memory.\ninitial_time::Dates.DateTime = UNSET_INI_TIME: Initial Time for the model solve.\ntime_series_cache_size::Int = IS.TIME_SERIES_CACHE_SIZE_BYTES: Size in bytes to cache for each time array. Default is 1 MiB. Set to 0 to disable.\n\nExample\n\ntemplate = ProblemTemplate(CopperPlatePowerModel, devices, branches, services)\nOpModel = EmulationModel(MockEmulationProblem, template, system)\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.EmulationModel-Tuple{Type{M} where M<:PowerSimulations.EmulationProblem, ProblemTemplate, System, Union{Nothing, JuMP.Model}}","page":"API Reference","title":"PowerSimulations.EmulationModel","text":"EmulationModel(\n ::Type{M<:PowerSimulations.EmulationProblem},\n template::PowerSimulations.AbstractProblemTemplate,\n sys::System;\n ...\n) -> EmulationModel\nEmulationModel(\n ::Type{M<:PowerSimulations.EmulationProblem},\n template::PowerSimulations.AbstractProblemTemplate,\n sys::System,\n jump_model::Union{Nothing, JuMP.Model};\n kwargs...\n) -> EmulationModel\n\n\nBuild the optimization problem of type M with the specific system and template\n\nArguments\n\n::Type{M} where M<:EmulationProblem: The abstract Emulation model type\ntemplate::AbstractProblemTemplate: The model reference made up of transmission, devices, branches, and services.\nsys::PSY.System: the system created using Power Systems\njump_model::Union{Nothing, JuMP.Model}: Enables passing a custom JuMP model. Use with care\n\nExample\n\ntemplate = ProblemTemplate(CopperPlatePowerModel, devices, branches, services)\nproblem = EmulationModel(MyEmProblemType, template, system, optimizer)\n\n\n\n\n\n","category":"method"},{"location":"api/PowerSimulations/#PowerSimulations.EmulationModel-Tuple{AbstractString, MathOptInterface.OptimizerWithAttributes}","page":"API Reference","title":"PowerSimulations.EmulationModel","text":"EmulationModel(\n directory::AbstractString,\n optimizer::MathOptInterface.OptimizerWithAttributes;\n jump_model,\n system,\n kwargs...\n) -> Any\n\n\nConstruct an EmulationProblem from a serialized file.\n\nArguments\n\ndirectory::AbstractString: Directory containing a serialized model.\noptimizer::MOI.OptimizerWithAttributes: The optimizer does not get serialized. Callers should pass whatever they passed to the original problem.\njump_model::Union{Nothing, JuMP.Model} = nothing: The JuMP model does not get serialized. Callers should pass whatever they passed to the original problem.\nsystem::Union{Nothing, PSY.System}: Optionally, the system used for the model. If nothing and systofile was set to true when the model was created, the system will be deserialized from a file.\n\n\n\n\n\n","category":"method"},{"location":"api/PowerSimulations/#PowerSimulations.build!-Tuple{EmulationModel}","page":"API Reference","title":"PowerSimulations.build!","text":"build!(\n model::EmulationModel;\n executions,\n output_dir,\n recorders,\n console_level,\n file_level,\n disable_timer_outputs\n)\n\n\nImplementation of build for any EmulationProblem\n\n\n\n\n\n","category":"method"},{"location":"api/PowerSimulations/#PowerSimulations.run!-Tuple{EmulationModel}","page":"API Reference","title":"PowerSimulations.run!","text":"run!(\n model::EmulationModel;\n export_problem_results,\n console_level,\n file_level,\n disable_timer_outputs,\n serialize,\n kwargs...\n) -> InfrastructureSystems.Simulation.RunStatusModule.RunStatus\n\n\nDefault run method for problems that conform to the requirements of EmulationModel{<: EmulationProblem}\n\nThis will call build! on the model if it is not already built. It will forward all keyword arguments to that function.\n\nArguments\n\nmodel::EmulationModel = model: Emulation model\noptimizer::MOI.OptimizerWithAttributes: The optimizer that is used to solve the model\nexecutions::Int: Number of executions for the emulator run\nexport_problem_results::Bool: If true, export OptimizationProblemResults DataFrames to CSV files.\noutput_dir::String: Required if the model is not already built, otherwise ignored\nenable_progress_bar::Bool: Enables/Disable progress bar printing\nserialize::Bool: If true, serialize the model to a file to allow re-execution later.\n\nExamples\n\nstatus = run!(model; optimizer = GLPK.Optimizer, executions = 10)\nstatus = run!(model; output_dir = ./model_output, optimizer = GLPK.Optimizer, executions = 10)\n\n\n\n\n\n","category":"method"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":" \n ","category":"page"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"","category":"page"},{"location":"api/PowerSimulations/#Service-Models","page":"API Reference","title":"Service Models","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"List of structures and methods for Service models","category":"page"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"ServiceModel","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.ServiceModel","page":"API Reference","title":"PowerSimulations.ServiceModel","text":"Establishes the model for a particular services specified by type. Uses the keyword argument use_service_name to assign the model to a service with the same name as the name in the template. Uses the keyword argument feedforward to enable passing values between operation model at simulation time\n\nArguments\n\n-::Type{D}: Power System Service Type -::Type{B}: Abstract Service Formulation\n\nAccepted Key Words\n\nfeedforward::Array{<:AbstractAffectFeedforward} : use to pass parameters between models\nuse_service_name::Bool : use the name as the name for the service\n\nExample\n\nreserves = ServiceModel(PSY.VariableReserve{PSY.ReserveUp}, RangeReserve)\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":" \n ","category":"page"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"","category":"page"},{"location":"api/PowerSimulations/#Simulation-Models","page":"API Reference","title":"Simulation Models","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"Refer to the Simulations Page to explanations on how to setup a Simulation, with Sequencing and Feedforwards.","category":"page"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"SimulationModels\nSimulationSequence\nSimulation\nSimulation(::AbstractString, ::Dict)\nbuild!(::Simulation)\nexecute!(::Simulation)","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.SimulationModels","page":"API Reference","title":"PowerSimulations.SimulationModels","text":"SimulationModels(\n decision_models::Vector{<:DecisionModel},\n emulation_models::Union{Nothing, EmulationModel}\n)\n\nStores the OperationProblem definitions to be used in the simulation. When creating the SimulationModels, the order in which the models are created determines the order on which the simulation is executed.\n\nArguments\n\ndecision_models::Vector{<:DecisionModel}: Vector of decision models.\nemulation_models::Union{Nothing, EmulationModel}: Optional argument to include\n\nan EmulationModel in the Simulation\n\nExample\n\ntemplate_uc = template_unit_commitment()\ntemplate_ed = template_economic_dispatch()\nmy_decision_model_uc = DecisionModel(template_1, sys_uc, optimizer, name = \"UC\")\nmy_decision_model_ed = DecisionModel(template_ed, sys_ed, optimizer, name = \"ED\")\nmodels = SimulationModels(\n decision_models = [\n my_decision_model_uc,\n my_decision_model_ed\n ]\n)\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.SimulationSequence","page":"API Reference","title":"PowerSimulations.SimulationSequence","text":"SimulationSequence(\n models::SimulationModels,\n feedforward::Dict{String, Vector{<:AbstractAffectFeedforward}}\n ini_cond_chronology::InitialConditionChronology\n)\n\nConstruct the simulation sequence between decision and emulation models.\n\nArguments\n\nmodels::SimulationModels: Vector of decisions and emulation models.\nfeedforward = Dict{String, Vector{<:AbstractAffectFeedforward}}(): Optional dictionary to specify how information\n\nand variables are exchanged between decision and emulation models.\n\nini_cond_chronology::nitialConditionChronology = InterProblemChronology(): TODO\n\nExample\n\ntemplate_uc = template_unit_commitment()\ntemplate_ed = template_economic_dispatch()\nmy_decision_model_uc = DecisionModel(template_1, sys_uc, optimizer, name = \"UC\")\nmy_decision_model_ed = DecisionModel(template_ed, sys_ed, optimizer, name = \"ED\")\nmodels = SimulationModels(\n decision_models = [\n my_decision_model_uc,\n my_decision_model_ed\n ]\n)\n# The following sequence set the commitment variables (`OnVariable`) for `ThermalStandard` units from UC to ED.\nsequence = SimulationSequence(;\n models = models,\n feedforwards = Dict(\n \"ED\" => [\n SemiContinuousFeedforward(;\n component_type = ThermalStandard,\n source = OnVariable,\n affected_values = [ActivePowerVariable],\n ),\n ],\n ),\n)\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.Simulation","page":"API Reference","title":"PowerSimulations.Simulation","text":"Simulation(\n sequence::SimulationSequence,\n name::String,\n steps::Int\n models::SimulationModels,\n simulation_folder::String,\n initial_time::Union{Nothing, Dates.DateTime}\n)\n\nConstruct the Simulation structure to run the sequence of decision and emulation models specified.\n\nArguments\n\n-sequence::SimulationSequence: Simulation sequence that specify how the decision and emulation models will be executed. -name::String: Name of the Simulation -steps::Int: Number of steps on which the sequence of models will be executed -models::SimulationModels: List of Decision and Emulation Models -simulation_folder::String: Folder on which results will be stored -initial_time::Union{Nothing, Dates.DateTime} = nothing: Initial time of which the simulation starts. If nothing it will default to the first timestamp of time series of the system.\n\nExample\n\ntemplate_uc = template_unit_commitment()\ntemplate_ed = template_economic_dispatch()\nmy_decision_model_uc = DecisionModel(template_1, sys_uc, optimizer, name = \"UC\")\nmy_decision_model_ed = DecisionModel(template_ed, sys_ed, optimizer, name = \"ED\")\nmodels = SimulationModels(\n decision_models = [\n my_decision_model_uc,\n my_decision_model_ed\n ]\n)\n# The following sequence set the commitment variables (`OnVariable`) for `ThermalStandard` units from UC to ED.\nsequence = SimulationSequence(;\n models = models,\n feedforwards = Dict(\n \"ED\" => [\n SemiContinuousFeedforward(;\n component_type = ThermalStandard,\n source = OnVariable,\n affected_values = [ActivePowerVariable],\n ),\n ],\n ),\n)\n\nsim = Simulation(\n sequence = sequence,\n name = \"Sim\",\n steps = 5,\n models = models,\n simulation_folder = mktempdir(cleanup=true),\n)\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.Simulation-Tuple{AbstractString, Dict}","page":"API Reference","title":"PowerSimulations.Simulation","text":"Simulation(directory::AbstractString, model_info::Dict)\n\n\nConstructs Simulation from a serialized directory. Callers should pass any kwargs here that they passed to the original Simulation.\n\nArguments\n\ndirectory::AbstractString: the directory returned from the call to serialize\nmodel_info::Dict: Two-level dictionary containing model parameters that cannot be serialized. The outer dict should be keyed by the problem name. The inner dict must contain 'optimizer' and may contain 'jump_model'. These should be the same values used for the original simulation.\n\n\n\n\n\n","category":"method"},{"location":"api/PowerSimulations/#PowerSimulations.build!-Tuple{Simulation}","page":"API Reference","title":"PowerSimulations.build!","text":"build!(\n sim::Simulation;\n recorders,\n console_level,\n file_level,\n serialize,\n partitions,\n index\n) -> InfrastructureSystems.Simulation.SimulationBuildStatusModule.SimulationBuildStatus\n\n\nBuild the Simulation, problems and the related folder structure.\n\nArguments\n\nsim::Simulation: simulation object\nrecorders::Vector{Symbol} = []: recorder names to register\nserialize::Bool = true: serializes the simulation objects in the simulation\nconsole_level = Logging.Error:\nfile_level = Logging.Info:\n\n\n\n\n\n","category":"method"},{"location":"api/PowerSimulations/#PowerSimulations.execute!-Tuple{Simulation}","page":"API Reference","title":"PowerSimulations.execute!","text":"execute!(\n sim::Simulation;\n kwargs...\n) -> InfrastructureSystems.Simulation.RunStatusModule.RunStatus\n\n\nSolves the simulation model for sequential Simulations.\n\nArguments\n\nsim::Simulation=sim: simulation object created by Simulation()\n\nThe optional keyword argument exports controls exporting of results to CSV files as the simulation runs.\n\nExample\n\nsim = Simulation(\"Test\", 7, problems, \"/Users/folder\")\nexecute!(sim::Simulation; kwargs...)\n\n\n\n\n\n","category":"method"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":" \n ","category":"page"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"","category":"page"},{"location":"api/PowerSimulations/#Variables","page":"API Reference","title":"Variables","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"For a list of variables for each device refer to its Formulations page.","category":"page"},{"location":"api/PowerSimulations/#Common-Variables","page":"API Reference","title":"Common Variables","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"ActivePowerVariable\nReactivePowerVariable\nPieceWiseLinearCostVariable","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.ActivePowerVariable","page":"API Reference","title":"PowerSimulations.ActivePowerVariable","text":"Struct to dispatch the creation of Active Power Variables\n\nDocs abbreviation: p\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.ReactivePowerVariable","page":"API Reference","title":"PowerSimulations.ReactivePowerVariable","text":"Struct to dispatch the creation of Reactive Power Variables\n\nDocs abbreviation: q\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.PieceWiseLinearCostVariable","page":"API Reference","title":"PowerSimulations.PieceWiseLinearCostVariable","text":"Struct to dispatch the creation of piecewise linear cost variables for objective function\n\nDocs abbreviation: delta\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Thermal-Unit-Variables","page":"API Reference","title":"Thermal Unit Variables","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"OnVariable\nStartVariable\nStopVariable\nTimeDurationOn\nTimeDurationOff\nHotStartVariable\nWarmStartVariable\nColdStartVariable\nPowerAboveMinimumVariable\nPowerOutput","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.OnVariable","page":"API Reference","title":"PowerSimulations.OnVariable","text":"Struct to dispatch the creation of a binary commitment status variable\n\nDocs abbreviation: u\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.StartVariable","page":"API Reference","title":"PowerSimulations.StartVariable","text":"Struct to dispatch the creation of Binary Start Variables\n\nDocs abbreviation: v\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.StopVariable","page":"API Reference","title":"PowerSimulations.StopVariable","text":"Struct to dispatch the creation of Binary Stop Variables\n\nDocs abbreviation: w\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.TimeDurationOn","page":"API Reference","title":"PowerSimulations.TimeDurationOn","text":"Auxiliary Variable for Thermal Generation Models to keep track of time elapsed on\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.TimeDurationOff","page":"API Reference","title":"PowerSimulations.TimeDurationOff","text":"Auxiliary Variable for Thermal Generation Models to keep track of time elapsed off\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.HotStartVariable","page":"API Reference","title":"PowerSimulations.HotStartVariable","text":"Struct to dispatch the creation of Hot Start Variable for Thermal units with temperature considerations\n\nDocs abbreviation: z^textth\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.WarmStartVariable","page":"API Reference","title":"PowerSimulations.WarmStartVariable","text":"Struct to dispatch the creation of Warm Start Variable for Thermal units with temperature considerations\n\nDocs abbreviation: y^textth\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.ColdStartVariable","page":"API Reference","title":"PowerSimulations.ColdStartVariable","text":"Struct to dispatch the creation of Cold Start Variable for Thermal units with temperature considerations\n\nDocs abbreviation: x^textth\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.PowerAboveMinimumVariable","page":"API Reference","title":"PowerSimulations.PowerAboveMinimumVariable","text":"Struct to dispatch the creation of Active Power Variables above minimum power for Thermal Compact formulations\n\nDocs abbreviation: Delta p\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.PowerOutput","page":"API Reference","title":"PowerSimulations.PowerOutput","text":"Auxiliary Variable for Thermal Generation Models that solve for power above min\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Storage-Unit-Variables","page":"API Reference","title":"Storage Unit Variables","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"ReservationVariable","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.ReservationVariable","page":"API Reference","title":"PowerSimulations.ReservationVariable","text":"Struct to dispatch the creation of binary storage charge reservation variable\n\nDocs abbreviation: u^textst\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Branches-and-Network-Variables","page":"API Reference","title":"Branches and Network Variables","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"FlowActivePowerVariable\nFlowActivePowerSlackUpperBound\nFlowActivePowerSlackLowerBound\nFlowActivePowerFromToVariable\nFlowActivePowerToFromVariable\nFlowReactivePowerFromToVariable\nFlowReactivePowerToFromVariable\nPhaseShifterAngle\nHVDCLosses\nHVDCFlowDirectionVariable\nVoltageMagnitude\nVoltageAngle","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.FlowActivePowerVariable","page":"API Reference","title":"PowerSimulations.FlowActivePowerVariable","text":"Struct to dispatch the creation of bidirectional Active Power Flow Variables\n\nDocs abbreviation: f\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.FlowActivePowerSlackUpperBound","page":"API Reference","title":"PowerSimulations.FlowActivePowerSlackUpperBound","text":"Struct to dispatch the creation of active power flow upper bound slack variables. Used when there is not enough flow through the branch in the forward direction.\n\nDocs abbreviation: f^textslup\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.FlowActivePowerSlackLowerBound","page":"API Reference","title":"PowerSimulations.FlowActivePowerSlackLowerBound","text":"Struct to dispatch the creation of active power flow lower bound slack variables. Used when there is not enough flow through the branch in the reverse direction.\n\nDocs abbreviation: f^textsllo\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.FlowActivePowerFromToVariable","page":"API Reference","title":"PowerSimulations.FlowActivePowerFromToVariable","text":"Struct to dispatch the creation of unidirectional Active Power Flow Variables\n\nDocs abbreviation: f^textfrom-to\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.FlowActivePowerToFromVariable","page":"API Reference","title":"PowerSimulations.FlowActivePowerToFromVariable","text":"Struct to dispatch the creation of unidirectional Active Power Flow Variables\n\nDocs abbreviation: f^textto-from\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.FlowReactivePowerFromToVariable","page":"API Reference","title":"PowerSimulations.FlowReactivePowerFromToVariable","text":"Struct to dispatch the creation of unidirectional Reactive Power Flow Variables\n\nDocs abbreviation: f^textqfrom-to\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.FlowReactivePowerToFromVariable","page":"API Reference","title":"PowerSimulations.FlowReactivePowerToFromVariable","text":"Struct to dispatch the creation of unidirectional Reactive Power Flow Variables\n\nDocs abbreviation: f^textqto-from\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.PhaseShifterAngle","page":"API Reference","title":"PowerSimulations.PhaseShifterAngle","text":"Struct to dispatch the creation of Phase Shifters Variables\n\nDocs abbreviation: theta^textshift\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.HVDCLosses","page":"API Reference","title":"PowerSimulations.HVDCLosses","text":"Struct to dispatch the creation of HVDC Losses Auxiliary Variables\n\nDocs abbreviation: ell\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.HVDCFlowDirectionVariable","page":"API Reference","title":"PowerSimulations.HVDCFlowDirectionVariable","text":"Struct to dispatch the creation of HVDC Flow Direction Auxiliary Variables\n\nDocs abbreviation: u^textdir\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.VoltageMagnitude","page":"API Reference","title":"PowerSimulations.VoltageMagnitude","text":"Struct to dispatch the creation of Voltage Magnitude Variables for AC formulations\n\nDocs abbreviation: v\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.VoltageAngle","page":"API Reference","title":"PowerSimulations.VoltageAngle","text":"Struct to dispatch the creation of Voltage Angle Variables for AC/DC formulations\n\nDocs abbreviation: theta\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Services-Variables","page":"API Reference","title":"Services Variables","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"ActivePowerReserveVariable\nServiceRequirementVariable\nSystemBalanceSlackUp\nSystemBalanceSlackDown\nReserveRequirementSlack\nInterfaceFlowSlackUp\nInterfaceFlowSlackDown","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.ActivePowerReserveVariable","page":"API Reference","title":"PowerSimulations.ActivePowerReserveVariable","text":"Struct to dispatch the creation of Active Power Reserve Variables\n\nDocs abbreviation: r\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.ServiceRequirementVariable","page":"API Reference","title":"PowerSimulations.ServiceRequirementVariable","text":"Struct to dispatch the creation of Service Requirement Variables\n\nDocs abbreviation: textreq\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.SystemBalanceSlackUp","page":"API Reference","title":"PowerSimulations.SystemBalanceSlackUp","text":"Struct to dispatch the creation of System-wide slack up variables. Used when there is not enough generation.\n\nDocs abbreviation: p^textslup\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.SystemBalanceSlackDown","page":"API Reference","title":"PowerSimulations.SystemBalanceSlackDown","text":"Struct to dispatch the creation of System-wide slack down variables. Used when there is not enough load curtailment.\n\nDocs abbreviation: p^textsldn\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.ReserveRequirementSlack","page":"API Reference","title":"PowerSimulations.ReserveRequirementSlack","text":"Struct to dispatch the creation of Reserve requirement slack variables. Used when there is not reserves in the system to satisfy the requirement.\n\nDocs abbreviation: r^textsl\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.InterfaceFlowSlackUp","page":"API Reference","title":"PowerSimulations.InterfaceFlowSlackUp","text":"Struct to dispatch the creation of Interface Flow Slack Up variables\n\nDocs abbreviation: f^textslup\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.InterfaceFlowSlackDown","page":"API Reference","title":"PowerSimulations.InterfaceFlowSlackDown","text":"Struct to dispatch the creation of Interface Flow Slack Down variables\n\nDocs abbreviation: f^textsldn\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Feedforward-Variables","page":"API Reference","title":"Feedforward Variables","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"UpperBoundFeedForwardSlack\nLowerBoundFeedForwardSlack","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.UpperBoundFeedForwardSlack","page":"API Reference","title":"PowerSimulations.UpperBoundFeedForwardSlack","text":"Struct to dispatch the creation of Slack variables for UpperBoundFeedforward\n\nDocs abbreviation: p^textffubsl\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.LowerBoundFeedForwardSlack","page":"API Reference","title":"PowerSimulations.LowerBoundFeedForwardSlack","text":"Struct to dispatch the creation of Slack variables for LowerBoundFeedforward\n\nDocs abbreviation: p^textfflbsl\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":" \n ","category":"page"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"","category":"page"},{"location":"api/PowerSimulations/#Constraints","page":"API Reference","title":"Constraints","text":"","category":"section"},{"location":"api/PowerSimulations/#Common-Constraints","page":"API Reference","title":"Common Constraints","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"PieceWiseLinearCostConstraint\n","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.PieceWiseLinearCostConstraint","page":"API Reference","title":"PowerSimulations.PieceWiseLinearCostConstraint","text":"Struct to create the PieceWiseLinearCostConstraint associated with a specified variable.\n\nSee Piecewise linear cost functions for more information.\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Network-Constraints","page":"API Reference","title":"Network Constraints","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"CopperPlateBalanceConstraint\nNodalBalanceActiveConstraint\nNodalBalanceReactiveConstraint","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.CopperPlateBalanceConstraint","page":"API Reference","title":"PowerSimulations.CopperPlateBalanceConstraint","text":"Struct to create the constraint to balance power in the copperplate model. For more information check Network Formulations.\n\nThe specified constraint is generally formulated as:\n\nsum_c in textcomponents p_t^c = 0 quad forall t in 1 dots T\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.NodalBalanceActiveConstraint","page":"API Reference","title":"PowerSimulations.NodalBalanceActiveConstraint","text":"Struct to create the constraint to balance active power in nodal formulation. For more information check Network Formulations.\n\nThe specified constraint depends on the network model chosen.\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.NodalBalanceReactiveConstraint","page":"API Reference","title":"PowerSimulations.NodalBalanceReactiveConstraint","text":"Struct to create the constraint to balance reactive power in nodal formulation. For more information check Network Formulations.\n\nThe specified constraint depends on the network model chosen.\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Power-Variable-Limit-Constraints","page":"API Reference","title":"Power Variable Limit Constraints","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"ActivePowerVariableLimitsConstraint\nReactivePowerVariableLimitsConstraint\nActivePowerVariableTimeSeriesLimitsConstraint\nInputActivePowerVariableLimitsConstraint\nOutputActivePowerVariableLimitsConstraint","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.ActivePowerVariableLimitsConstraint","page":"API Reference","title":"PowerSimulations.ActivePowerVariableLimitsConstraint","text":"Struct to create the constraint to limit active power expressions. For more information check Device Formulations.\n\nThe specified constraint depends on the UpperBound and LowerBound expressions, but in its most basic formulation is of the form:\n\nP^textmin le p_t le P^textmax quad forall t in 1dotsT\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.ReactivePowerVariableLimitsConstraint","page":"API Reference","title":"PowerSimulations.ReactivePowerVariableLimitsConstraint","text":"Struct to create the constraint to limit reactive power expressions. For more information check Device Formulations.\n\nThe specified constraint depends on the UpperBound and LowerBound expressions, but in its most basic formulation is of the form:\n\nQ^textmin le q_t le Q^textmax quad forall t in 1dotsT\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.ActivePowerVariableTimeSeriesLimitsConstraint","page":"API Reference","title":"PowerSimulations.ActivePowerVariableTimeSeriesLimitsConstraint","text":"Struct to create the constraint to limit active power expressions by a time series parameter. For more information check Device Formulations.\n\nThe specified constraint depends on the UpperBound expressions, but in its most basic formulation is of the form:\n\np_t le textActivePowerTimeSeriesParameter_t quad forall t in 1dotsT\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.InputActivePowerVariableLimitsConstraint","page":"API Reference","title":"PowerSimulations.InputActivePowerVariableLimitsConstraint","text":"Struct to create the constraint to limit active power input expressions. For more information check Device Formulations.\n\nThe specified constraint depends on the UpperBound and LowerBound expressions, but in its most basic formulation is of the form:\n\nP^textmin le p_t^textin le P^textmax quad forall t in 1dotsT\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.OutputActivePowerVariableLimitsConstraint","page":"API Reference","title":"PowerSimulations.OutputActivePowerVariableLimitsConstraint","text":"Struct to create the constraint to limit active power output expressions. For more information check Device Formulations.\n\nThe specified constraint depends on the UpperBound and LowerBound expressions, but in its most basic formulation is of the form:\n\nP^textmin le p_t^textout le P^textmax quad forall t in 1dotsT\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Services-Constraints","page":"API Reference","title":"Services Constraints","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"RequirementConstraint\nParticipationFractionConstraint\nReservePowerConstraint","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.RequirementConstraint","page":"API Reference","title":"PowerSimulations.RequirementConstraint","text":"Struct to create the constraint for satisfying active power reserve requirements. For more information check Service Formulations.\n\nThe constraint is as follows:\n\nsum_dinmathcalD_s r_dt + r_t^textsl ge textReqquad forall tin 1dots T quad text(for a ConstantReserve) \nsum_dinmathcalD_s r_dt + r_t^textsl ge textRequirementTimeSeriesParameter_tquad forall tin 1dots T quad text(for a VariableReserve)\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.ParticipationFractionConstraint","page":"API Reference","title":"PowerSimulations.ParticipationFractionConstraint","text":"Struct to create the constraint to participation assignments limits in the active power reserves. For more information check Service Formulations.\n\nThe constraint is as follows:\n\nr_dt le textReq cdot textPF quad forall din mathcalD_s forall tin 1dots T quad text(for a ConstantReserve) \nr_dt le textRequirementTimeSeriesParameter_t cdot textPFquad forall din mathcalD_s forall tin 1dots T quad text(for a VariableReserve)\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.ReservePowerConstraint","page":"API Reference","title":"PowerSimulations.ReservePowerConstraint","text":"Struct to create the constraint for ensuring that NonSpinning Reserve can be delivered from turn-off thermal units.\n\nFor more information check Service Formulations for NonSpinningReserve.\n\nThe constraint is as follows:\n\nr_dt le (1 - u_dt^textth) cdot R^textlimit_d quad forall d in mathcalD_s forall t in 1dots T\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Thermal-Unit-Constraints","page":"API Reference","title":"Thermal Unit Constraints","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"ActiveRangeICConstraint\nCommitmentConstraint\nDurationConstraint\nRampConstraint\nStartupInitialConditionConstraint\nStartupTimeLimitTemperatureConstraint","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.ActiveRangeICConstraint","page":"API Reference","title":"PowerSimulations.ActiveRangeICConstraint","text":"Struct to create the constraint for starting up ThermalMultiStart units. For more information check ThermalGen Formulations for ThermalMultiStartUnitCommitment.\n\nThe specified constraint is formulated as:\n\nmaxP^textthmax - P^textthshdown 0 cdot w_1^textth le u^textthinit (P^textthmax - P^textthmin) - P^textthinit\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.CommitmentConstraint","page":"API Reference","title":"PowerSimulations.CommitmentConstraint","text":"Struct to create the commitment constraint between the on, start, and stop variables. For more information check ThermalGen Formulations.\n\nThe specified constraints are formulated as:\n\nu_1^textth = u^textthinit + v_1^textth - w_1^textth \nu_t^textth = u_t-1^textth + v_t^textth - w_t^textth quad forall t in 2dotsT \nv_t^textth + w_t^textth le 1 quad forall t in 1dotsT\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.DurationConstraint","page":"API Reference","title":"PowerSimulations.DurationConstraint","text":"Struct to create the duration constraint for commitment formulations, i.e. min-up and min-down.\n\nFor more information check ThermalGen Formulations.\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.RampConstraint","page":"API Reference","title":"PowerSimulations.RampConstraint","text":"Struct to create the RampConstraint associated with a specified thermal device or reserve service.\n\nFor thermal units, see more information in Thermal Formulations. The constraint is as follows:\n\n-R^textthdn le p_t^textth - p_t-1^textth le R^textthup quad forall tin 1 dots T\n\nFor Ramp Reserve, see more information in Service Formulations. The constraint is as follows:\n\nr_dt le R^textthup cdot textTFquad forall din mathcalD_s forall tin 1dots T quad text(for ReserveUp) \nr_dt le R^textthdn cdot textTFquad forall din mathcalD_s forall tin 1dots T quad text(for ReserveDown)\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.StartupInitialConditionConstraint","page":"API Reference","title":"PowerSimulations.StartupInitialConditionConstraint","text":"Struct to create the start-up initial condition constraints for ThermalMultiStart.\n\nFor more information check ThermalGen Formulations for ThermalMultiStartUnitCommitment.\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.StartupTimeLimitTemperatureConstraint","page":"API Reference","title":"PowerSimulations.StartupTimeLimitTemperatureConstraint","text":"Struct to create the start-up time limit constraints for ThermalMultiStart.\n\nFor more information check ThermalGen Formulations for ThermalMultiStartUnitCommitment.\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Renewable-Unit-Constraints","page":"API Reference","title":"Renewable Unit Constraints","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"EqualityConstraint","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.EqualityConstraint","page":"API Reference","title":"PowerSimulations.EqualityConstraint","text":"Struct to create the constraint that sets the reactive power to the power factor in the RenewableConstantPowerFactor formulation for renewable units.\n\nFor more information check RenewableGen Formulations.\n\nThe specified constraint is formulated as:\n\nq_t^textre = textpf cdot p_t^textre quad forall t in 1dots T\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Branches-Constraints","page":"API Reference","title":"Branches Constraints","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"FlowLimitConstraint\nFlowRateConstraint\nFlowRateConstraintFromTo\nFlowRateConstraintToFrom\nHVDCLossesAbsoluteValue\nHVDCPowerBalance\nNetworkFlowConstraint\nRateLimitConstraint\nPhaseAngleControlLimit","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.FlowLimitConstraint","page":"API Reference","title":"PowerSimulations.FlowLimitConstraint","text":"Struct to create the constraint that set the flow limits through a PhaseShiftingTransformer.\n\nFor more information check Branch Formulations.\n\nThe specified constraint is formulated as:\n\n-R^textmax le f_t le R^textmax quad forall t in 1dotsT\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.FlowRateConstraint","page":"API Reference","title":"PowerSimulations.FlowRateConstraint","text":"Struct to create the constraint that set the flow limits through an HVDC two-terminal branch.\n\nFor more information check Branch Formulations.\n\nThe specified constraint is formulated as:\n\nR^textmin le f_t le R^textmax quad forall t in 1dotsT\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.FlowRateConstraintFromTo","page":"API Reference","title":"PowerSimulations.FlowRateConstraintFromTo","text":"Struct to create the constraint that set the flow from-to limits through an HVDC two-terminal branch.\n\nFor more information check Branch Formulations.\n\nThe specified constraint is formulated as:\n\nR^textfrommin le f_t^textfrom-to le R^textfrommax forall t in 1dots T\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.FlowRateConstraintToFrom","page":"API Reference","title":"PowerSimulations.FlowRateConstraintToFrom","text":"Struct to create the constraint that set the flow to-from limits through an HVDC two-terminal branch.\n\nFor more information check Branch Formulations.\n\nThe specified constraint is formulated as:\n\nR^texttomin le f_t^textto-from le R^texttomaxquad forall t in 1dots T\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.HVDCLossesAbsoluteValue","page":"API Reference","title":"PowerSimulations.HVDCLossesAbsoluteValue","text":"Struct to create the constraints that set the losses through a lossy HVDC two-terminal line.\n\nFor more information check Branch Formulations.\n\nThe specified constraints are formulated as:\n\nbeginalign*\n f_t^textto-from - f_t^textfrom-to le ell_tquad forall t in 1dots T \n f_t^textfrom-to - f_t^textto-from le ell_tquad forall t in 1dots T\nendalign*\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.HVDCPowerBalance","page":"API Reference","title":"PowerSimulations.HVDCPowerBalance","text":"Struct to create the constraints that set the power balance across a lossy HVDC two-terminal line.\n\nFor more information check Branch Formulations.\n\nThe specified constraints are formulated as:\n\nbeginalign*\n f_t^textto-from - f_t^textfrom-to le L_1 cdot f_t^textto-from - L_0quad forall t in 1dots T \n f_t^textfrom-to - f_t^textto-from ge L_1 cdot f_t^textfrom-to + L_0quad forall t in 1dots T \n f_t^textfrom-to - f_t^textto-from ge - M^textbig (1 - u^textdir_t)quad forall t in 1dots T \n f_t^textto-from - f_t^textfrom-to ge - M^textbig u^textdir_tquad forall t in 1dots T \nendalign*\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.NetworkFlowConstraint","page":"API Reference","title":"PowerSimulations.NetworkFlowConstraint","text":"Struct to create the constraint the AC branch flows depending on the network model. For more information check Branch Formulations.\n\nThe specified constraint depends on the network model chosen. The most common application is the StaticBranch in a PTDF Network Model:\n\nf_t = sum_i=1^N textPTDF_ib cdot textBal_it quad forall t in 1dots T\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.RateLimitConstraint","page":"API Reference","title":"PowerSimulations.RateLimitConstraint","text":"Struct to create the constraint that set the AC flow limits through branches.\n\nFor more information check Branch Formulations.\n\nThe specified constraint is formulated as:\n\nbeginalign*\n f_t - f_t^textslup le R^textmaxquad forall t in 1dots T \n f_t + f_t^textsllo ge -R^textmaxquad forall t in 1dots T\nendalign*\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.PhaseAngleControlLimit","page":"API Reference","title":"PowerSimulations.PhaseAngleControlLimit","text":"Struct to create the constraint that set the angle limits through a PhaseShiftingTransformer.\n\nFor more information check Branch Formulations.\n\nThe specified constraint is formulated as:\n\nTheta^textmin le theta^textshift_t le Theta^textmax quad forall t in 1dotsT\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Feedforward-Constraints","page":"API Reference","title":"Feedforward Constraints","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"FeedforwardSemiContinuousConstraint\nFeedforwardUpperBoundConstraint\nFeedforwardLowerBoundConstraint","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.FeedforwardSemiContinuousConstraint","page":"API Reference","title":"PowerSimulations.FeedforwardSemiContinuousConstraint","text":"Struct to create the constraint for semicontinuous feedforward limits.\n\nFor more information check Feedforward Formulations.\n\nThe specified constraint is formulated as:\n\nbeginalign*\n textActivePowerRangeExpressionUB_t = p_t^textth - texton_t^textthP^textthmax le 0 quad forall tin 1 dots T \n textActivePowerRangeExpressionLB_t = p_t^textth - texton_t^textthP^textthmin ge 0 quad forall tin 1 dots T\nendalign*\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.FeedforwardUpperBoundConstraint","page":"API Reference","title":"PowerSimulations.FeedforwardUpperBoundConstraint","text":"Struct to create the constraint for upper bound feedforward limits.\n\nFor more information check Feedforward Formulations.\n\nThe specified constraint is formulated as:\n\nbeginalign*\n textAffectedVariable_t - p_t^textffubsl le textSourceVariableParameter_t quad forall t in 1dots T\nendalign*\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.FeedforwardLowerBoundConstraint","page":"API Reference","title":"PowerSimulations.FeedforwardLowerBoundConstraint","text":"Struct to create the constraint for lower bound feedforward limits.\n\nFor more information check Feedforward Formulations.\n\nThe specified constraint is formulated as:\n\nbeginalign*\n textAffectedVariable_t + p_t^textfflbsl ge textSourceVariableParameter_t quad forall t in 1dots T\nendalign*\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":" \n ","category":"page"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"","category":"page"},{"location":"api/PowerSimulations/#Parameters","page":"API Reference","title":"Parameters","text":"","category":"section"},{"location":"api/PowerSimulations/#Time-Series-Parameters","page":"API Reference","title":"Time Series Parameters","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"ActivePowerTimeSeriesParameter\nReactivePowerTimeSeriesParameter\nRequirementTimeSeriesParameter","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.ActivePowerTimeSeriesParameter","page":"API Reference","title":"PowerSimulations.ActivePowerTimeSeriesParameter","text":"Parameter to define active power time series\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.ReactivePowerTimeSeriesParameter","page":"API Reference","title":"PowerSimulations.ReactivePowerTimeSeriesParameter","text":"Parameter to define reactive power time series\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.RequirementTimeSeriesParameter","page":"API Reference","title":"PowerSimulations.RequirementTimeSeriesParameter","text":"Parameter to define requirement time series\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Variable-Value-Parameters","page":"API Reference","title":"Variable Value Parameters","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"UpperBoundValueParameter\nLowerBoundValueParameter\nOnStatusParameter\nFixValueParameter","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.UpperBoundValueParameter","page":"API Reference","title":"PowerSimulations.UpperBoundValueParameter","text":"Parameter to define variable upper bound\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.LowerBoundValueParameter","page":"API Reference","title":"PowerSimulations.LowerBoundValueParameter","text":"Parameter to define variable lower bound\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.OnStatusParameter","page":"API Reference","title":"PowerSimulations.OnStatusParameter","text":"Parameter to define unit commitment status\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#PowerSimulations.FixValueParameter","page":"API Reference","title":"PowerSimulations.FixValueParameter","text":"Parameter to FixValueParameter\n\n\n\n\n\n","category":"type"},{"location":"api/PowerSimulations/#Objective-Function-Parameters","page":"API Reference","title":"Objective Function Parameters","text":"","category":"section"},{"location":"api/PowerSimulations/","page":"API Reference","title":"API Reference","text":"CostFunctionParameter","category":"page"},{"location":"api/PowerSimulations/#PowerSimulations.CostFunctionParameter","page":"API Reference","title":"PowerSimulations.CostFunctionParameter","text":"Parameter to define cost function coefficient\n\n\n\n\n\n","category":"type"},{"location":"modeler_guide/read_results/#read_results","page":"Read results","title":"Read results","text":"","category":"section"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"Once a DecisionModel is solved via solve!(model) or a Simulation is executed (and solved) via execute!(simulation), the results are stored and can be accessed directly in the REPL for result exploration and plotting.","category":"page"},{"location":"modeler_guide/read_results/#Read-results-of-a-Decision-Problem","page":"Read results","title":"Read results of a Decision Problem","text":"","category":"section"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"Once a DecisionModel is solved, results are accessed using OptimizationProblemResults(model) as follows:","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"# The DecisionModel is already constructed\nbuild!(model, output_dir = mktempdir())\nsolve!(model)\n\nresults = OptimizationProblemResults(model)","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"The output will showcase the available expressions, parameters and variables to read. For example it will look like:","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"Start: 2020-01-01T00:00:00\nEnd: 2020-01-03T23:00:00\nResolution: 60 minutes\n\nPowerSimulations Problem Auxiliary variables Results\n┌──────────────────────────────────────────┐\n│ CumulativeCyclingCharge__HybridSystem │\n│ CumulativeCyclingDischarge__HybridSystem │\n└──────────────────────────────────────────┘\n\nPowerSimulations Problem Expressions Results\n┌─────────────────────────────────────────────┐\n│ ProductionCostExpression__RenewableDispatch │\n│ ProductionCostExpression__ThermalStandard │\n└─────────────────────────────────────────────┘\n\nPowerSimulations Problem Duals Results\n┌──────────────────────────────────────┐\n│ CopperPlateBalanceConstraint__System │\n└──────────────────────────────────────┘\n\nPowerSimulations Problem Parameters Results\n┌────────────────────────────────────────────────────────────────────────┐\n│ ActivePowerTimeSeriesParameter__RenewableNonDispatch │\n│ RenewablePowerTimeSeries__HybridSystem │\n│ RequirementTimeSeriesParameter__VariableReserve__ReserveUp__Spin_Up_R3 │\n│ RequirementTimeSeriesParameter__VariableReserve__ReserveUp__Reg_Up │\n│ ActivePowerTimeSeriesParameter__PowerLoad │\n│ ActivePowerTimeSeriesParameter__RenewableDispatch │\n│ RequirementTimeSeriesParameter__VariableReserve__ReserveDown__Reg_Down │\n│ ActivePowerTimeSeriesParameter__HydroDispatch │\n│ RequirementTimeSeriesParameter__VariableReserve__ReserveUp__Spin_Up_R1 │\n│ RequirementTimeSeriesParameter__VariableReserve__ReserveUp__Spin_Up_R2 │\n└────────────────────────────────────────────────────────────────────────┘\n\nPowerSimulations Problem Variables Results\n┌────────────────────────────────────────────────────────────────────┐\n│ ActivePowerOutVariable__HybridSystem │\n│ ReservationVariable__HybridSystem │\n│ RenewablePower__HybridSystem │\n│ ActivePowerReserveVariable__VariableReserve__ReserveUp__Spin_Up_R1 │\n│ SystemBalanceSlackUp__System │\n│ BatteryEnergyShortageVariable__HybridSystem │\n│ ActivePowerReserveVariable__VariableReserve__ReserveUp__Reg_Up │\n│ StopVariable__ThermalStandard │\n│ BatteryStatus__HybridSystem │\n│ BatteryDischarge__HybridSystem │\n│ ActivePowerInVariable__HybridSystem │\n│ DischargeRegularizationVariable__HybridSystem │\n│ BatteryCharge__HybridSystem │\n│ ActivePowerVariable__RenewableDispatch │\n│ ActivePowerReserveVariable__VariableReserve__ReserveDown__Reg_Down │\n│ EnergyVariable__HybridSystem │\n│ OnVariable__HybridSystem │\n│ BatteryEnergySurplusVariable__HybridSystem │\n│ SystemBalanceSlackDown__System │\n│ ActivePowerReserveVariable__VariableReserve__ReserveUp__Spin_Up_R2 │\n│ ThermalPower__HybridSystem │\n│ ActivePowerVariable__ThermalStandard │\n│ StartVariable__ThermalStandard │\n│ ActivePowerReserveVariable__VariableReserve__ReserveUp__Spin_Up_R3 │\n│ OnVariable__ThermalStandard │\n│ ChargeRegularizationVariable__HybridSystem │\n└────────────────────────────────────────────────────────────────────┘","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"Then the following code can be used to read results:","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"# Read active power of Thermal Standard\nthermal_active_power = read_variable(results, \"ActivePowerVariable__ThermalStandard\")\n\n# Read max active power parameter of RenewableDispatch\nrenewable_param = read_parameter(results, \"ActivePowerTimeSeriesParameter__RenewableDispatch\")\n\n# Read cost expressions of ThermalStandard units\ncost_thermal = read_expression(results, \"ProductionCostExpression__ThermalStandard\")\n\n# Read dual variables\ndual_balance_constraint = read_dual(results, \"CopperPlateBalanceConstraint__System\")\n\n# Read auxiliary variables\naux_var_result = read_aux_variable(results, \"CumulativeCyclingCharge__HybridSystem\")","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"Results will be in the form of DataFrames that can be easily explored.","category":"page"},{"location":"modeler_guide/read_results/#Read-results-of-a-Simulation","page":"Read results","title":"Read results of a Simulation","text":"","category":"section"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"# The Simulation is already constructed\nbuild!(sim)\nexecute!(sim; enable_progress_bar=true)\n\nresults_sim = SimulationResults(sim)","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"As an example, the SimulationResults printing will look like:","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"Decision Problem Results\n┌──────────────┬─────────────────────┬──────────────┬─────────────────────────┐\n│ Problem Name │ Initial Time │ Resolution │ Last Solution Timestamp │\n├──────────────┼─────────────────────┼──────────────┼─────────────────────────┤\n│ ED │ 2020-10-02T00:00:00 │ 60 minutes │ 2020-10-09T23:00:00 │\n│ UC │ 2020-10-02T00:00:00 │ 1440 minutes │ 2020-10-09T00:00:00 │\n└──────────────┴─────────────────────┴──────────────┴─────────────────────────┘\n\nEmulator Results\n┌─────────────────┬───────────┐\n│ Name │ Emulator │\n│ Resolution │ 5 minutes │\n│ Number of steps │ 2304 │\n└─────────────────┴───────────┘","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"With this, it is possible to obtain results of each DecisionModel and EmulationModel as follows:","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"# Use the Problem Name for Decision Problems\nresults_uc = get_decision_problem_results(results_sim, \"UC\")\nresults_ed = get_decision_problem_results(results_sim, \"ED\")\nresults_emulator = get_emulation_problem_results(results_sim)","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"Once we have each decision (or emulation) problem results, we can explore directly using the approach for Decision Models, mentioned in the previous section.","category":"page"},{"location":"modeler_guide/read_results/#Reading-solutions-for-all-simulation-steps","page":"Read results","title":"Reading solutions for all simulation steps","text":"","category":"section"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"In this case, using read_variable (or read expression, parameter or dual), will return a dictionary of all steps (of that Decision Problem). For example, the following code:","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"thermal_active_power = read_variable(results_uc, \"ActivePowerVariable__ThermalStandard\")","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"will return:","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"DataStructures.SortedDict{Any, Any, Base.Order.ForwardOrdering} with 8 entries:\n DateTime(\"2020-10-02T00:00:00\") => 72×54 DataFrame…\n DateTime(\"2020-10-03T00:00:00\") => 72×54 DataFrame…\n DateTime(\"2020-10-04T00:00:00\") => 72×54 DataFrame…\n DateTime(\"2020-10-05T00:00:00\") => 72×54 DataFrame…\n DateTime(\"2020-10-06T00:00:00\") => 72×54 DataFrame…\n DateTime(\"2020-10-07T00:00:00\") => 72×54 DataFrame…\n DateTime(\"2020-10-08T00:00:00\") => 72×54 DataFrame…\n DateTime(\"2020-10-09T00:00:00\") => 72×54 DataFrame…","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"That is, a sorted dictionary for each simulation step, using as a key the initial timestamp for that specific simulation step.","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"Note that in this case, each DataFrame, has a dimension of 72 times 54, since the horizon is 72 hours (number of rows), but the interval is only 24 hours. Indeed, note the initial timestamp of each simulation step is the beginning of each day, i.e. 24 hours. Finally, there 54 columns, since this example system has 53 ThermalStandard units (plus 1 column for the timestamps). The user is free to explore the solution of any simulation step as needed.","category":"page"},{"location":"modeler_guide/read_results/#Reading-the-\"realized\"-solution-(i.e.-the-interval)","page":"Read results","title":"Reading the \"realized\" solution (i.e. the interval)","text":"","category":"section"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"Using read_realized_variable (or read realized expression, parameter or dual), will return the DataFrame of the realized solution of any specific variable. That is, it will concatenate the corresponding simulation step with the specified interval of that step, to construct a single DataFrame with the \"realized solution\" of the entire simulation.","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"For example, the code:","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"th_realized_power = read_realized_variable(results_uc, \"ActivePowerVariable__ThermalStandard\")","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"will return:","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"92×54 DataFrame\n Row │ DateTime 322_CT_6 321_CC_1 202_STEAM_3 223_CT_4 123_STEAM_2 213_CT_1 223_CT_6 313_CC_1 101_STEAM_3 123_C ⋯\n │ DateTime Float64 Float64 Float64 Float64 Float64 Float64 Float64 Float64 Float64 Float ⋯\n─────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n 1 │ 2020-10-02T00:00:00 0.0 293.333 0.0 0.0 0.0 0.0 0.0 231.667 76.0 0.0 ⋯\n 2 │ 2020-10-02T01:00:00 0.0 267.552 0.0 0.0 0.0 0.0 0.0 231.667 76.0 0.0\n 3 │ 2020-10-02T02:00:00 0.0 234.255 0.0 0.0 -4.97544e-11 0.0 0.0 231.667 76.0 0.0\n 4 │ 2020-10-02T03:00:00 0.0 249.099 0.0 0.0 -4.97544e-11 0.0 0.0 231.667 76.0 0.0\n 5 │ 2020-10-02T04:00:00 0.0 293.333 0.0 0.0 -4.97544e-11 0.0 0.0 231.667 76.0 0.0 ⋯\n 6 │ 2020-10-02T05:00:00 0.0 293.333 1.27578e-11 0.0 -4.97544e-11 0.0 0.0 293.333 76.0 0.0\n ⋮ │ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋱\n 187 │ 2020-10-09T18:00:00 0.0 293.333 76.0 0.0 155.0 0.0 0.0 318.843 76.0 0.0\n 188 │ 2020-10-09T19:00:00 0.0 293.333 76.0 0.0 124.0 0.0 0.0 293.333 76.0 0.0\n 189 │ 2020-10-09T20:00:00 0.0 293.333 60.6667 0.0 124.0 0.0 0.0 0.0 76.0 0.0 ⋯\n 190 │ 2020-10-09T21:00:00 -7.65965e-12 293.333 60.6667 0.0 124.0 0.0 0.0 0.0 76.0 0.0\n 191 │ 2020-10-09T22:00:00 0.0 0.0 60.6667 0.0 124.0 0.0 0.0 0.0 76.0 7.156\n 192 │ 2020-10-09T23:00:00 0.0 0.0 60.6667 0.0 117.81 0.0 0.0 0.0 76.0 0.0\n 44 columns and 180 rows omitted","category":"page"},{"location":"modeler_guide/read_results/","page":"Read results","title":"Read results","text":"In this case, the 8 simulation steps of 24 hours (192 hours), in a single DataFrame, to enable easy exploration of the realized results for the user.","category":"page"},{"location":"tutorials/basics_of_developing_models/#Basics-of-Developing-Operation-Models","page":"Basics of Developing Operation Models","title":"Basics of Developing Operation Models","text":"","category":"section"},{"location":"tutorials/basics_of_developing_models/","page":"Basics of Developing Operation Models","title":"Basics of Developing Operation Models","text":"Check the page PowerSimulations Structure for more background on PowerSimulations.jl","category":"page"},{"location":"modeler_guide/definitions/#Definitions","page":"Definitions","title":"Definitions","text":"","category":"section"},{"location":"modeler_guide/definitions/#A","page":"Definitions","title":"A","text":"","category":"section"},{"location":"modeler_guide/definitions/","page":"Definitions","title":"Definitions","text":"Attributes: Certain device formulations can be customized by specifying attributes that will include/remove certain variables, expressions and/or constraints. For example, in StorageSystemsSimulations.jl, the device formulation of StorageDispatchWithReserves can be specified with the following dictionary of attributes:","category":"page"},{"location":"modeler_guide/definitions/","page":"Definitions","title":"Definitions","text":"set_device_model!(\n template,\n DeviceModel(\n GenericBattery,\n StorageDispatchWithReserves;\n attributes=Dict{String, Any}(\n \"reservation\" => false,\n \"cycling_limits\" => false,\n \"energy_target\" => false,\n \"complete_coverage\" => false,\n \"regularization\" => false,\n ),\n ),\n)","category":"page"},{"location":"modeler_guide/definitions/","page":"Definitions","title":"Definitions","text":"Changing the attributes between true or false can enable/disable multiple aspects of the formulation.","category":"page"},{"location":"modeler_guide/definitions/#C","page":"Definitions","title":"C","text":"","category":"section"},{"location":"modeler_guide/definitions/","page":"Definitions","title":"Definitions","text":"Chronologies: In PowerSimulations.jl, chronologies define where information is flowing. There are two types of chronologies. 1) inter-stage chronologies (InterProblemChronology) that define how information flows between stages. e.g. day-ahead solutions are used to inform economic dispatch problems; and 2) intra-stage chronologies (IntraProblemChronology) that define how information flows between multiple executions of a single stage. e.g. the dispatch setpoints of the first period of an economic dispatch problem are constrained by the ramping limits from setpoints in the final period of the previous problem.","category":"page"},{"location":"modeler_guide/definitions/#D","page":"Definitions","title":"D","text":"","category":"section"},{"location":"modeler_guide/definitions/","page":"Definitions","title":"Definitions","text":"Decision Problem: A decision problem calculates the desired system operation based on forecasts of uncertain inputs and information about the state of the system. The output of a decision problem represents the policies used to drive the set-points of the system's devices, like generators or switches, and depends on the purpose of the problem. See the Decision Model Tutorial to learn more about solving individual problems.\nDevice Formulation: The model of a device that is incorporated into a large system optimization models. For instance, the storage device model used inside of a Unit Commitment (UC) problem. A device model needs to follow some requirements to be integrated into operation problems. For more information about valid DeviceModels and their mathematical representations, check out the Formulation Library.","category":"page"},{"location":"modeler_guide/definitions/#E","page":"Definitions","title":"E","text":"","category":"section"},{"location":"modeler_guide/definitions/","page":"Definitions","title":"Definitions","text":"Emulation Problem: An emulation problem is used to mimic the system's behavior subject to an incoming decision and the realization of a forecasted inputs. The solution of the emulator produces outputs representative of the system performance when operating subject the policies resulting from the decision models.","category":"page"},{"location":"modeler_guide/definitions/#F","page":"Definitions","title":"F","text":"","category":"section"},{"location":"modeler_guide/definitions/","page":"Definitions","title":"Definitions","text":"FeedForward: The definition of exactly what information is passed using the defined chronologies is accomplished using FeedForwards. Specifically, a FeedForward is used to define what to do with information being passed with an inter-stage chronology in a Simulation. The most common FeedForward is the SemiContinuousFeedForward that affects the semi-continuous range constraints of thermal generators in the economic dispatch problems based on the value of the (already solved) unit-commitment variables.","category":"page"},{"location":"modeler_guide/definitions/#H","page":"Definitions","title":"H","text":"","category":"section"},{"location":"modeler_guide/definitions/","page":"Definitions","title":"Definitions","text":"Horizon: The number of steps in the look-ahead of a decision problem. For instance, a Day-Ahead problem usually has a 48 step horizon. Check the time Time Series Data Section in PowerSystems.jl","category":"page"},{"location":"modeler_guide/definitions/#I","page":"Definitions","title":"I","text":"","category":"section"},{"location":"modeler_guide/definitions/","page":"Definitions","title":"Definitions","text":"Interval: The amount of time between updates to the decision problem. For instance, Day-Ahead problems usually have a 24-hour intervals and Real-Time problems have 5-minute intervals. Check the time Time Series Data Section in PowerSystems.jl","category":"page"},{"location":"modeler_guide/definitions/#R","page":"Definitions","title":"R","text":"","category":"section"},{"location":"modeler_guide/definitions/","page":"Definitions","title":"Definitions","text":"Resolution: The amount of time between time steps in a simulation. For instance 1-hour or 5-minutes. In Julia these are defined using the syntax Hour(1) and Minute(5). Check the time Time Series Data Section in PowerSystems.jl\nResults vs Realized Results: In PowerSimulations.jl the term results is used to refer to the solution of all optimization problems in a Simulation. When using read_variable(results, Variable) in a DecisionModel of a simulation, the output is a dictionary with the values of such variable for every optimization problem solved, while read_realized_variable(results, Variable) will return the values of the specified interval and number of steps in the simulation. See the Read Results page for more details.","category":"page"},{"location":"modeler_guide/definitions/#S","page":"Definitions","title":"S","text":"","category":"section"},{"location":"modeler_guide/definitions/","page":"Definitions","title":"Definitions","text":"Service Formulation: The model of a service that is incorporated into a large system optimization models. Services (or ancillary services) are models used to ensure that there is necessary support to the power grid from generators to consumers, in order to ensure reliable operation of the system. The most common application for ancillary services are reserves, i.e., generation (or load) that is not currently being used, but can be quickly made available in case of unexpected changes of grid conditions, for example a sudden loss of load or generation. A service model needs to follow some requirements to be integrated into operation problems. For more information about valid ServiceModels and their mathematical representations, check out the Formulation Library.\nSimulation: A simulation is a pre-determined sequence of decision problems in a way that solving it, resembles the solution procedures commonly used by operators. The most common simulation model is the solution of a Unit Commitment and Economic Dispatch sequence of problems.\nSolver: A solver is a software package that incorporates algorithms for finding solutions to one or more classes of optimization problem. For example, FICO Xpress is a commercial optimization solver for linear programming (LP), convex quadratic programming (QP) problems, convex quadratically constrained quadratic programming (QCQP), second-order cone programming (SOCP) and their mixed integer counterparts. A solver is required to be specified in order to solve any computer optimization problem.","category":"page"},{"location":"modeler_guide/definitions/#T","page":"Definitions","title":"T","text":"","category":"section"},{"location":"modeler_guide/definitions/","page":"Definitions","title":"Definitions","text":"Template: A ProblemTemplate is just a collection of DeviceModels that allows the user to specify the formulations of each set of devices (by device type) independently so that the modeler can adjust the level of detail according to the question of interest and the available data. For more information about valid DeviceModels and their mathematical representations, check out the Formulation Library.","category":"page"},{"location":"formulation_library/Introduction/#formulation_intro","page":"Introduction","title":"Formulations Introduction","text":"","category":"section"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"PowerSimulations.jl enables modularity in its formulations by assigning a DeviceModel to each PowerSystems.jl component type existing in a defined system.","category":"page"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"PowerSimulations.jl has a multiple AbstractDeviceFormulation subtypes that can be applied to different PowerSystems.jl device types, each dispatching to different methods for populating the optimization problem variables, objective function, expressions and constraints.","category":"page"},{"location":"formulation_library/Introduction/#Example-Formulation","page":"Introduction","title":"Example Formulation","text":"","category":"section"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"For example a typical optimization problem in a DecisionModel in PowerSimulations.jl with three DeviceModel has the abstract form of:","category":"page"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"beginalign*\n min_boldsymbolx textObjective_DeviceModelA + textObjective_DeviceModelB + textObjective_DeviceModelC \n textst \n hspace09cm textConstraints_NetworkModel \n hspace09cm textConstraints_DeviceModelA \n hspace09cm textConstraints_DeviceModelB \n hspace09cm textConstraints_DeviceModelC \nendalign*","category":"page"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"Suppose this is a system with the following characteristics:","category":"page"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"Horizon: 48 hours\nInterval: 24 hours\nResolution: 1 hour\nThree Buses: 1, 2 and 3\nOne ThermalStandard (device A) unit at bus 1\nOne RenewableDispatch (device B) unit at bus 2\nOne PowerLoad (device C) at bus 3\nThree Line that connects all the buses","category":"page"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"Now, we assign the following DeviceModel to each PowerSystems.jl with:","category":"page"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"Type Formulation\nNetwork CopperPlatePowerModel\nThermalStandard ThermalDispatchNoMin\nRenewableDispatch RenewableFullDispatch\nPowerLoad StaticPowerLoad","category":"page"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"Note that we did not assign any DeviceModel to Line since the CopperPlatePowerModel used for the network assumes that everything is lumped in the same node (like a copper plate with infinite capacity), and hence there are no flows between buses that branches can limit.","category":"page"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"Each DeviceModel formulation is described in specific in their respective page, but the overall optimization problem will end-up as:","category":"page"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"beginalign*\n min_boldsymbolp^textth boldsymbolp^textre sum_t=1^48 C^textth p_t^textth - C^textre p_t^textre \n textst \n hspace09cm p_t^textth + p_t^textre = P_t^textload quad forall t in 1dots 48 \n hspace09cm 0 le p_t^textth le P^textthmax \n hspace09cm 0 le p_t^textre le textActivePowerTimeSeriesParameter_t \nendalign*","category":"page"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"Note that the StaticPowerLoad does not impose any cost to the objective function or constraint but adds its power demand to the supply-balance demand of the CopperPlatePowerModel used. Since we are using the ThermalDispatchNoMin formulation for the thermal generation, the lower bound for the power is 0, instead of P^textthmin. In addition, we are assuming a linear cost C^textth. Finally, the RenewableFullDispatch formulation allows the dispatch of the renewable unit between 0 and its maximum injection time series p_t^textreparam.","category":"page"},{"location":"formulation_library/Introduction/#Nomenclature","page":"Introduction","title":"Nomenclature","text":"","category":"section"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"In the formulations described in the other pages, the nomenclature is as follows:","category":"page"},{"location":"formulation_library/Introduction/","page":"Introduction","title":"Introduction","text":"Lowercase letters are used for variables, e.g., p for power.\nUppercase letters are used for parameters, e.g., C for costs.\nSubscripts are used for indexing, e.g., (cdot)_t for indexing at time t.\nSuperscripts are used for descriptions, e.g., (cdot)^textth to describe a thermal (th) variable/parameter.\nBold letters are used for vectors, e.g., boldsymbolp = p_1dots24.","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/#Debugging-infeasible-models","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"","category":"section"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"Getting infeasible solutions to models is a common occurrence in operations simulations, there are multiple reasons why this can happen. PowerSimulations.jl has several tools to help debug this situation.","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/#Adding-slacks-to-the-model","page":"Debugging infeasible models","title":"Adding slacks to the model","text":"","category":"section"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"One of the most common infeasibility issues observed is due to not enough generation to supply demand, or conversely, excessive fixed (non-curtailable) generation in a low demand scenario. ","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"The recommended solution for any of these cases is adding slack variables to the network model, for example:","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"template_uc = ProblemTemplate(\n NetworkModel(\n CopperPlatePowerModel,\n use_slacks=true,\n ),\n )","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"will add slack variables to the ActivePowerBalance expression.","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"In this case, if the problem is now feasible, the user can check the solution of the variables SystemBalanceSlackUp and SystemBalanceSlackDown, and if one value is greater than zero, it represents that not enough generation (for Slack Up) or not enough demand (for Slack Down) in the optimization problem.","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/#Services-cases","page":"Debugging infeasible models","title":"Services cases","text":"","category":"section"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"In many scenarios, certain units are also required to provide reserve requirements, e.g. thermal units mandated to provide up-regulation. In such scenarios, it is also possible to add slack variables, by specifying the service model (RangeReserve) for the specific service type (VariableReserve{ReserveUp}) as:","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"set_service_model!(\n template_uc,\n ServiceModel(\n VariableReserve{ReserveUp},\n RangeReserve;\n use_slacks=true\n ),\n)","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"Again, if the problem is now feasible, check the solution of ReserveRequirementSlack variable, and if it is larger than zero in a specific time-step, then it is evidence that there is not enough reserve available to satisfy the requirement.","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/#Getting-the-infeasibility-conflict","page":"Debugging infeasible models","title":"Getting the infeasibility conflict","text":"","category":"section"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"Some solvers allows to identify which constraints and variables are producing the infeasibility, by finding the irreducible infeasible set (IIS), that is the subset of constraints and variable bounds that will become feasible if any single constraint or variable bound is removed. ","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"To enable this feature in PowerSimulations the keyword argument calculate_conflict must be set to true, when creating the DecisionModel. Note that not all solvers allow the computation of the IIS, but most commercial solvers have this capability. It is also recommended to enable the keyword argument store_variable_names=true to help understanding which variables are with infeasibility issues.","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"The following code creates a decision model with the Xpress optimizer, and enabling the calculate_conflict=true keyword argument.","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"DecisionModel(\n template_ed,\n sys_rts_rt;\n name=\"ED\",\n optimizer=optimizer_with_attributes(Xpress.Optimizer, \"MIPRELSTOP\" => 1e-2),\n optimizer_solve_log_print=true,\n calculate_conflict=true,\n store_variable_names=true,\n)","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"Here is an example on how the IIS will be displayed as:","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"Error: Constraints participating in conflict basis (IIS) \n│ \n│ ┌──────────────────────────────────────┐\n│ │ CopperPlateBalanceConstraint__System │\n│ ├──────────────────────────────────────┤\n│ │ (113, 26) │\n│ └──────────────────────────────────────┘\n│ ┌──────────────────────────────────┐\n│ │ EnergyAssetBalance__HybridSystem │\n│ ├──────────────────────────────────┤\n│ │ (\"317_Hybrid\", 26) │\n│ └──────────────────────────────────┘\n│ ┌─────────────────────────────────────────────┐\n│ │ PieceWiseLinearCostConstraint__HybridSystem │\n│ ├─────────────────────────────────────────────┤\n│ │ (\"317_Hybrid\", 26) │\n│ └─────────────────────────────────────────────┘\n│ ┌────────────────────────────────────────────────┐\n│ │ PieceWiseLinearCostConstraint__ThermalStandard │\n│ ├────────────────────────────────────────────────┤\n│ │ (\"202_STEAM_3\", 26) │\n│ │ (\"101_STEAM_3\", 26) │\n│ │ (\"118_CC_1\", 26) │\n│ │ (\"202_STEAM_4\", 26) │\n│ │ (\"315_CT_6\", 26) │\n│ │ (\"201_STEAM_3\", 26) │\n│ │ (\"102_STEAM_4\", 26) │\n│ └────────────────────────────────────────────────┘\n│ ┌──────────────────────────────────────────────────────────────────────┐\n│ │ ActivePowerVariableTimeSeriesLimitsConstraint__RenewableDispatch__ub │\n│ ├──────────────────────────────────────────────────────────────────────┤\n│ │ (\"122_WIND_1\", 26) │\n│ │ (\"324_PV_3\", 26) │\n│ │ (\"312_PV_1\", 26) │\n│ │ (\"102_PV_1\", 26) │\n│ │ (\"101_PV_1\", 26) │\n│ │ (\"324_PV_2\", 26) │\n│ │ (\"313_PV_2\", 26) │\n│ │ (\"104_PV_1\", 26) │\n│ │ (\"101_PV_2\", 26) │\n│ │ (\"309_WIND_1\", 26) │\n│ │ (\"310_PV_2\", 26) │\n│ │ (\"113_PV_1\", 26) │\n│ │ (\"314_PV_1\", 26) │\n│ │ (\"324_PV_1\", 26) │\n│ │ (\"103_PV_1\", 26) │\n│ │ (\"303_WIND_1\", 26) │\n│ │ (\"314_PV_2\", 26) │\n│ │ (\"102_PV_2\", 26) │\n│ │ (\"314_PV_3\", 26) │\n│ │ (\"320_PV_1\", 26) │\n│ │ (\"101_PV_3\", 26) │\n│ │ (\"319_PV_1\", 26) │\n│ │ (\"314_PV_4\", 26) │\n│ │ (\"310_PV_1\", 26) │\n│ │ (\"215_PV_1\", 26) │\n│ │ (\"313_PV_1\", 26) │\n│ │ (\"101_PV_4\", 26) │\n│ │ (\"119_PV_1\", 26) │\n│ └──────────────────────────────────────────────────────────────────────┘\n│ ┌─────────────────────────────────────────────────────────────────────────────┐\n│ │ FeedforwardSemiContinuousConstraint__ThermalStandard__ActivePowerVariable_ub │\n│ ├─────────────────────────────────────────────────────────────────────────────┤\n│ │ (\"322_CT_6\", 26) │\n│ │ (\"321_CC_1\", 26) │\n│ │ (\"223_CT_4\", 26) │\n│ │ (\"213_CT_1\", 26) │\n│ │ (\"223_CT_6\", 26) │\n│ │ (\"123_CT_1\", 26) │\n│ │ (\"113_CT_3\", 26) │\n│ │ (\"302_CT_3\", 26) │\n│ │ (\"215_CT_4\", 26) │\n│ │ (\"301_CT_4\", 26) │\n│ │ (\"113_CT_2\", 26) │\n│ │ (\"221_CC_1\", 26) │\n│ │ (\"223_CT_5\", 26) │\n│ │ (\"315_CT_7\", 26) │\n│ │ (\"215_CT_5\", 26) │\n│ │ (\"113_CT_1\", 26) │\n│ │ (\"307_CT_2\", 26) │\n│ │ (\"213_CT_2\", 26) │\n│ │ (\"113_CT_4\", 26) │\n│ │ (\"218_CC_1\", 26) │\n│ │ (\"213_CC_3\", 26) │\n│ │ (\"323_CC_2\", 26) │\n│ │ (\"322_CT_5\", 26) │\n│ │ (\"207_CT_2\", 26) │\n│ │ (\"123_CT_5\", 26) │\n│ │ (\"123_CT_4\", 26) │\n│ │ (\"207_CT_1\", 26) │\n│ │ (\"301_CT_3\", 26) │\n│ │ (\"302_CT_4\", 26) │\n│ │ (\"307_CT_1\", 26) │\n│ └─────────────────────────────────────────────────────────────────────────────┘\n│ ┌───────────────────────────────────────────────────────┐\n│ │ RenewableActivePowerLimitConstraint__HybridSystem__ub │\n│ ├───────────────────────────────────────────────────────┤\n│ │ (\"317_Hybrid\", 26) │\n│ └───────────────────────────────────────────────────────┘\n│ ┌───────────────────────────────────────┐\n│ │ ThermalOnVariableUb__HybridSystem__ub │\n│ ├───────────────────────────────────────┤\n│ │ (\"317_Hybrid\", 26) │\n│ └───────────────────────────────────────┘\n\n Error: Serializing Infeasible Problem at /var/folders/1v/t69qyl0n5059n6c1nn7sp8zm7g8s6z/T/jl_jNSREb/compact_sim/problems/ED/infeasible_ED_2020-10-06T15:00:00.json","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"Note that the IIS clearly identify that the issue is happening at time step 26, and constraints are related with the CopperPlateBalanceConstraint__System, with multiple upper bound constraints, for the hybrid system, renewable units and thermal units. This highlights that there may not be enough generation in the system. Indeed, by enabling system slacks, the problem become feasible.","category":"page"},{"location":"modeler_guide/debugging_infeasible_models/","page":"Debugging infeasible models","title":"Debugging infeasible models","text":"Finally, the infeasible model is exported in a json file that can be loaded directly in JuMP to be explored. More information about this is available here.","category":"page"},{"location":"modeler_guide/psi_structure/#psi_structure","page":"PowerSimulations.jl Modeling Structure","title":"PowerSimulations.jl Modeling Structure","text":"","category":"section"},{"location":"modeler_guide/psi_structure/","page":"PowerSimulations.jl Modeling Structure","title":"PowerSimulations.jl Modeling Structure","text":"PowerSimulations enables the simulation of a sequence of power systems optimization problems and provides user control over each aspect of the simulation configuration. Specifically:","category":"page"},{"location":"modeler_guide/psi_structure/","page":"PowerSimulations.jl Modeling Structure","title":"PowerSimulations.jl Modeling Structure","text":"mathematical formulations can be selected for each component with DeviceModel and ServiceModel\na problem can be defined by creating model entries in a Operations ProblemTemplates\nmodels (DecisionModel or EmulationModel) can be built by applying a ProblemTemplate to a System and can be executed/solved in isolation or as part of a Simulation\nSimulations can be defined and executed by sequencing one or more models and defining how and when data flows between models.","category":"page"},{"location":"modeler_guide/psi_structure/","page":"PowerSimulations.jl Modeling Structure","title":"PowerSimulations.jl Modeling Structure","text":"question: What is the difference between a Model and a Problem?\nA \"Problem\" is an abstract mathematical description of how to represent power system behavior, whereas a \"Model\" is a concrete representation of a \"Problem\" applied to a dataset. I.e. once a Problem is populated with data describing all the loads, generators, lines, etc., it becomes a Model.","category":"page"},{"location":"formulation_library/General/#formulation_library","page":"General","title":"Formulations","text":"","category":"section"},{"location":"formulation_library/General/","page":"General","title":"General","text":"Modeling formulations are created by dispatching on abstract subtypes of PowerSimulations.AbstractDeviceFormulation","category":"page"},{"location":"formulation_library/General/#FixedOutput","page":"General","title":"FixedOutput","text":"","category":"section"},{"location":"formulation_library/General/","page":"General","title":"General","text":"FixedOutput","category":"page"},{"location":"formulation_library/General/#PowerSimulations.FixedOutput","page":"General","title":"PowerSimulations.FixedOutput","text":"Formulation type to augment the power balance constraint expression with a time series parameter\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/General/","page":"General","title":"General","text":"Variables:","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"No variables are created for DeviceModel(<:DeviceType, FixedOutput)","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"Static Parameters:","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"ThermalGen:\nP^textthmax = PowerSystems.get_max_active_power(device)\nQ^textthmax = PowerSystems.get_max_reactive_power(device)\nStorage:\nP^textstmax = PowerSystems.get_max_active_power(device)\nQ^textstmax = PowerSystems.get_max_reactive_power(device)","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"Time Series Parameters:","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"using PowerSimulations\nusing HydroPowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombo_tables = []\nfor t in [RenewableGen, ThermalGen, HydroGen, ElectricLoad]\n combos = PowerSimulations.get_default_time_series_names(t, FixedOutput)\n combo_table = DataFrame(\n \"Parameter\" => map(x -> \"[`$x`](@ref)\", collect(keys(combos))),\n \"Default Time Series Name\" => map(x -> \"`$x`\", collect(values(combos))),\n )\n insertcols!(combo_table, 1, \"Device Type\" => fill(string(t), length(combos)))\n push!(combo_tables, combo_table)\nend\nmdtable(vcat(combo_tables...), latex = false)","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"Objective:","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"No objective terms are created for DeviceModel(<:DeviceType, FixedOutput)","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"Expressions:","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"Adds the active and reactive parameters listed for specific device types above to the respective active and reactive power balance expressions created by the selected Network Formulations.","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"Constraints:","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"No constraints are created for DeviceModel(<:DeviceType, FixedOutput)","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"","category":"page"},{"location":"formulation_library/General/#FunctionData-Options","page":"General","title":"FunctionData Options","text":"","category":"section"},{"location":"formulation_library/General/","page":"General","title":"General","text":"PowerSimulations can represent variable costs using a variety of different methods depending on the data available in each device. The following describes the objective function terms that are populated for each variable cost option.","category":"page"},{"location":"formulation_library/General/#LinearFunctionData","page":"General","title":"LinearFunctionData","text":"","category":"section"},{"location":"formulation_library/General/","page":"General","title":"General","text":"variable_cost = LinearFunctionData(c): creates a fixed marginal cost term in the objective function","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"beginaligned\n textmin sum_t c * G_t\nendaligned","category":"page"},{"location":"formulation_library/General/#QuadraticFunctionData-and-PolynomialFunctionData","page":"General","title":"QuadraticFunctionData and PolynomialFunctionData","text":"","category":"section"},{"location":"formulation_library/General/","page":"General","title":"General","text":"variable_cost::QuadraticFunctionData and variable_cost::PolynomialFunctionData: create a polynomial cost term in the objective function","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"beginaligned\n textmin sum_t sum_n C_n * G_t^n\nendaligned","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"where","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"For QuadraticFunctionData:\nC_0 = get_constant_term(variable_cost)\nC_1 = get_proportional_term(variable_cost)\nC_2 = get_quadratic_term(variable_cost)\nFor PolynomialFunctionData:\nC_n = get_coefficients(variable_cost)[n]","category":"page"},{"location":"formulation_library/General/#andPiecewiseLinearSlopeData","page":"General","title":"`andPiecewiseLinearSlopeData`","text":"","category":"section"},{"location":"formulation_library/General/","page":"General","title":"General","text":"variable_cost::PiecewiseLinearData and variable_cost::PiecewiseLinearSlopeData: create a piecewise linear cost term in the objective function","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"beginaligned\n textmin sum_t f(G_t)\nendaligned","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"where","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"For variable_cost::PiecewiseLinearData, f(x) is the piecewise linear function obtained by connecting the (x, y) points get_points(variable_cost) in order.\nFor variable_cost = PiecewiseLinearSlopeData([x0, x1, x2, ...], y0, [s0, s1, s2, ...]), f(x) is the piecewise linear function obtained by starting at (x0, y0), drawing a segment at slope s0 to x=x1, drawing a segment at slope s1 to x=x2, etc.","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"","category":"page"},{"location":"formulation_library/General/#StorageCost","page":"General","title":"StorageCost","text":"","category":"section"},{"location":"formulation_library/General/","page":"General","title":"General","text":"Adds an objective function cost term according to:","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"beginaligned\n textmin sum_t quad E^surplus_t * C^penalty - E^shortage_t * C^value\nendaligned","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"Impact of different cost configurations:","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"The following table describes all possible configurations of the StorageCost with the target constraint in hydro or storage device models. Cases 1(a) & 2(a) will not impact the model's operations, and the target constraint will be rendered useless. In most cases that have no energy target and a non-zero value for C^value, if this cost is too high (C^value 0) or too low (C^value 0) can result in either the model holding on to stored energy till the end of the model not storing any energy in the device. This is caused by the fact that when the energy target is zero, we have E_t = - E^shortage_t, and - E^shortage_t * C^value in the objective function is replaced by E_t * C^value, thus resulting in C^value to be seen as the cost of stored energy.","category":"page"},{"location":"formulation_library/General/","page":"General","title":"General","text":"Case Energy Target Energy Shortage Cost Energy Value / Energy Surplus cost Effect\nCase 1(a) hatE=0 C^penalty=0 C^value=0 no change\nCase 1(b) hatE=0 C^penalty=0 C^value0 penalty for storing energy\nCase 1(c) hatE=0 C^penalty0 C^value=0 no penalties or incentives applied\nCase 1(d) hatE=0 C^penalty=0 C^value0 incentive for storing energy\nCase 1(e) hatE=0 C^penalty0 C^value0 penalty for storing energy\nCase 1(f) hatE=0 C^penalty0 C^value0 incentive for storing energy\nCase 2(a) hatE0 C^penalty=0 C^value=0 no change\nCase 2(b) hatE0 C^penalty=0 C^value0 penalty on energy storage in excess of target\nCase 2(c) hatE0 C^penalty0 C^value=0 penalty on energy storage short of target\nCase 2(d) hatE0 C^penalty=0 C^value0 incentive on excess energy\nCase 2(e) hatE0 C^penalty0 C^value0 penalty on both excess/shortage of energy\nCase 2(f) hatE0 C^penalty0 C^value0 penalty for shortage, incentive for excess energy","category":"page"},{"location":"modeler_guide/logging/#Logging","page":"Logging","title":"Logging","text":"","category":"section"},{"location":"modeler_guide/logging/","page":"Logging","title":"Logging","text":"PowerSimulations.jl will output many log messages when building systems and running simulations. You may want to customize what gets logged to the console and, optionally, a file.","category":"page"},{"location":"modeler_guide/logging/","page":"Logging","title":"Logging","text":"By default all log messages of level Logging.Info or higher will get displayed to the console. When you run a simulation a simulation-specific logger will take over and log its messages to a file in the logs directory in the simulation output directory. When finished it will relinquish control back to the global logger.","category":"page"},{"location":"modeler_guide/logging/#Configuring-the-global-logger","page":"Logging","title":"Configuring the global logger","text":"","category":"section"},{"location":"modeler_guide/logging/","page":"Logging","title":"Logging","text":"To configure the global logger in a Jupyter Notebook or REPL you may configure your own logger with the Julia Logging standard library or use the convenience function provided by PowerSimulations. This example will log messages of level Logging.Error to console and Logging.Info and higher to the file power-simulations.log in the current directory.","category":"page"},{"location":"modeler_guide/logging/","page":"Logging","title":"Logging","text":"import Logging\nusing PowerSimulations\nlogger = configure_logging(\n console_level = Logging.Error,\n file_level = Logging.Info,\n filename = \"power-simulations.log\"\n)","category":"page"},{"location":"modeler_guide/logging/#Configuring-the-simulation-logger","page":"Logging","title":"Configuring the simulation logger","text":"","category":"section"},{"location":"modeler_guide/logging/","page":"Logging","title":"Logging","text":"You can configure the logging level used by the simulation logger when you call build!(simulation). Here is an example that increases logging verbosity:","category":"page"},{"location":"modeler_guide/logging/","page":"Logging","title":"Logging","text":"import Logging\nusing PowerSimulations\nsimulation = Simulation(...)\nbuild!(simulation, console_level = Logging.Info, file_level = Logging.Debug)","category":"page"},{"location":"modeler_guide/logging/","page":"Logging","title":"Logging","text":"The log file will be located at ///logs/simulation.log.","category":"page"},{"location":"modeler_guide/logging/#Solver-logs","page":"Logging","title":"Solver logs","text":"","category":"section"},{"location":"modeler_guide/logging/","page":"Logging","title":"Logging","text":"You can configure logging for the solver you use. Refer to the solver documentation. PowerSimulations does not redirect or intercept prints to stdout or stderr from other libraries.","category":"page"},{"location":"modeler_guide/logging/#Recorder-events","page":"Logging","title":"Recorder events","text":"","category":"section"},{"location":"modeler_guide/logging/","page":"Logging","title":"Logging","text":"PowerSimulations uses the InfrastructureSystems.Recorder to store simulation events in a log file. Refer to this link for more information.","category":"page"},{"location":"formulation_library/RenewableGen/#PowerSystems.RenewableGen-Formulations","page":"Renewable Generation","title":"PowerSystems.RenewableGen Formulations","text":"","category":"section"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Renewable generation formulations define the optimization models that describe renewable units mathematical model in different operational settings, such as economic dispatch and unit commitment.","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"note: Note\nThe use of reactive power variables and constraints will depend on the network model used, i.e., whether it uses (or does not use) reactive power. If the network model is purely active power-based, reactive power variables and related constraints are not created.","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"note: Note\nReserve variables for services are not included in the formulation, albeit their inclusion change the variables, expressions, constraints and objective functions created. A detailed description of the implications in the optimization models is described in the Service formulation section.","category":"page"},{"location":"formulation_library/RenewableGen/#Table-of-contents","page":"Renewable Generation","title":"Table of contents","text":"","category":"section"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"RenewableFullDispatch\nRenewableConstantPowerFactor\nValid configurations","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"","category":"page"},{"location":"formulation_library/RenewableGen/#RenewableFullDispatch","page":"Renewable Generation","title":"RenewableFullDispatch","text":"","category":"section"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"RenewableFullDispatch","category":"page"},{"location":"formulation_library/RenewableGen/#PowerSimulations.RenewableFullDispatch","page":"Renewable Generation","title":"PowerSimulations.RenewableFullDispatch","text":"Formulation type to add injection variables constrained by a maximum injection time series for RenewableGen\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Variables:","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"ActivePowerVariable:\nBounds: [0.0, ]\nSymbol: p^textre\nReactivePowerVariable:\nBounds: [0.0, ]\nSymbol: q^textre","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Static Parameters:","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"P^textremin = PowerSystems.get_active_power_limits(device).min\nQ^textremin = PowerSystems.get_reactive_power_limits(device).min\nQ^textremax = PowerSystems.get_reactive_power_limits(device).max","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Time Series Parameters:","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Uses the max_active_power timeseries parameter to limit the available active power at each time-step.","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"using PowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombos = PowerSimulations.get_default_time_series_names(RenewableGen, RenewableFullDispatch)\ncombo_table = DataFrame(\n \"Parameter\" => map(x -> \"[`$x`](@ref)\", collect(keys(combos))),\n \"Default Time Series Name\" => map(x -> \"`$x`\", collect(values(combos))),\n )\nmdtable(combo_table, latex = false)","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Objective:","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Creates an objective function term based on the FunctionData Options where the quantity term is defined as - p^textre to incentivize generation from RenewableGen devices.","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Expressions:","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Adds p^textre and q^textre terms to the respective active and reactive power balance expressions created by the selected Network Formulations.","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Constraints:","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"beginaligned\n P^textremin le p_t^textre le textActivePowerTimeSeriesParameter_t quad forall t in 1dots T \n Q^textremin le q_t^textre le Q^textremax quad forall t in 1dots T\nendaligned","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"","category":"page"},{"location":"formulation_library/RenewableGen/#RenewableConstantPowerFactor","page":"Renewable Generation","title":"RenewableConstantPowerFactor","text":"","category":"section"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"RenewableConstantPowerFactor","category":"page"},{"location":"formulation_library/RenewableGen/#PowerSimulations.RenewableConstantPowerFactor","page":"Renewable Generation","title":"PowerSimulations.RenewableConstantPowerFactor","text":"Formulation type to add real and reactive injection variables with constant power factor with maximum real power injections constrained by a time series for RenewableGen\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Variables:","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"ActivePowerVariable:\nBounds: [0.0, ]\nDefault initial value: PowerSystems.get_active_power(device)\nSymbol: p^textre\nReactivePowerVariable:\nBounds: [0.0, ]\nDefault initial value: PowerSystems.get_reactive_power(device)\nSymbol: q^textre","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Static Parameters:","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"P^textremin = PowerSystems.get_active_power_limits(device).min\nQ^textremin = PowerSystems.get_reactive_power_limits(device).min\nQ^textremax = PowerSystems.get_reactive_power_limits(device).max\ntextpf = PowerSystems.get_power_factor(device)","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Time Series Parameters:","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"using PowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombos = PowerSimulations.get_default_time_series_names(RenewableGen, RenewableConstantPowerFactor)\ncombo_table = DataFrame(\n \"Parameter\" => map(x -> \"[`$x`](@ref)\", collect(keys(combos))),\n \"Default Time Series Name\" => map(x -> \"`$x`\", collect(values(combos))),\n )\nmdtable(combo_table, latex = false)","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Objective:","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Creates an objective function term based on the FunctionData Options where the quantity term is defined as - p_t^textre to incentivize generation from RenewableGen devices.","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Expressions:","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Adds p^textre and q^textre terms to the respective active and reactive power balance expressions created by the selected Network Formulations","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Constraints:","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"beginaligned\n P^textremin le p_t^textre le textActivePowerTimeSeriesParameter_t quad forall t in 1dots T \n q_t^textre = textpf cdot p_t^textre quad forall t in 1dots T\nendaligned","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"","category":"page"},{"location":"formulation_library/RenewableGen/#Valid-configurations","page":"Renewable Generation","title":"Valid configurations","text":"","category":"section"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"Valid DeviceModels for subtypes of RenewableGen include the following:","category":"page"},{"location":"formulation_library/RenewableGen/","page":"Renewable Generation","title":"Renewable Generation","text":"using PowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombos = PowerSimulations.generate_device_formulation_combinations()\nfilter!(x -> x[\"device_type\"] <: RenewableGen, combos)\ncombo_table = DataFrame(\n \"Valid DeviceModel\" => [\"`DeviceModel($(c[\"device_type\"]), $(c[\"formulation\"]))`\" for c in combos],\n \"Device Type\" => [\"[$(c[\"device_type\"])](https://nrel-Sienna.github.io/PowerSystems.jl/stable/model_library/generated_$(c[\"device_type\"])/)\" for c in combos],\n \"Formulation\" => [\"[$(c[\"formulation\"])](@ref)\" for c in combos],\n )\nmdtable(combo_table, latex = false)","category":"page"},{"location":"formulation_library/Service/#service_formulations","page":"Services","title":"PowerSystems.Service Formulations","text":"","category":"section"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Services (or ancillary services) are models used to ensure that there is necessary support to the power grid from generators to consumers, in order to ensure reliable operation of the system.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"The most common application for ancillary services are reserves, i.e., generation (or load) that is not currently being used, but can be quickly made available in case of unexpected changes of grid conditions, for example a sudden loss of load or generation.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"A key challenge of adding services to a system, from a mathematical perspective, is specifying which units contribute to the specified requirement of a service, that implies the creation of new variables (such as reserve variables) and modification of constraints.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"In this documentation, we first specify the available Services in the grid, and what requirements impose in the system, and later we discuss the implication on device formulations for specific units.","category":"page"},{"location":"formulation_library/Service/#Table-of-contents","page":"Services","title":"Table of contents","text":"","category":"section"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"RangeReserve\nStepwiseCostReserve\nGroupReserve\nRampReserve\nNonSpinningReserve\nConstantMaxInterfaceFlow\nChanges on Expressions","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"","category":"page"},{"location":"formulation_library/Service/#RangeReserve","page":"Services","title":"RangeReserve","text":"","category":"section"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"RangeReserve","category":"page"},{"location":"formulation_library/Service/#PowerSimulations.RangeReserve","page":"Services","title":"PowerSimulations.RangeReserve","text":"Struct for to add reserves to be larger than a specified requirement\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For each service s of the model type RangeReserve the following variables are created:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Variables:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"ActivePowerReserveVariable:\nBounds: [0.0, ]\nDefault proportional cost: 10 textSystemBasePower\nSymbol: r_d for d in contributing devices to the service s","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"If slacks are enabled:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"ReserveRequirementSlack:\nBounds: [0.0, ]\nDefault proportional cost: 1e5\nSymbol: r^textsl","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Depending on the PowerSystems.jl type associated to the RangeReserve formulation model, the parameters are:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Static Parameters","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textPF = PowerSystems.get_max_participation_factor(service)","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For a ConstantReserve PowerSystems type:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textReq = PowerSystems.get_requirement(service)","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Time Series Parameters ","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For a VariableReserve PowerSystems type:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"using PowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombos = PowerSimulations.get_default_time_series_names(VariableReserve, RangeReserve)\ncombo_table = DataFrame(\n \"Parameter\" => map(x -> \"[`$x`](@ref)\", collect(keys(combos))),\n \"Default Time Series Name\" => map(x -> \"`$x`\", collect(values(combos))),\n )\nmdtable(combo_table, latex = false)","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Relevant Methods:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"mathcalD_s = PowerSystems.get_contributing_devices(system, service): Set (vector) of all contributing devices to the service s in the system.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Objective:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Add a large proportional cost to the objective function if slack variables are used + r^textsl cdot 10^5. In addition adds the default cost for ActivePowerReserveVariables as a proportional cost.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Expressions:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Adds the ActivePowerReserveVariable for upper/lower bound expressions of contributing devices.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For ReserveUp types, the variable is added to ActivePowerRangeExpressionUB, such that this expression considers both the ActivePowerVariable and its reserve variable. Similarly, For ReserveDown types, the variable is added to ActivePowerRangeExpressionLB, such that this expression considers both the ActivePowerVariable and its reserve variable","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Example: for a thermal unit d contributing to two different ReserveUp s_1 s_2 services (e.g. Reg-Up and Spin):","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textActivePowerRangeExpressionUB_t = p_t^textth + r_s_1t + r_s_2 t le P^textthmax","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"similarly if s_3 is a ReserveDown service (e.g. Reg-Down):","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textActivePowerRangeExpressionLB_t = p_t^textth - r_s_3t ge P^textthmin","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Constraints: ","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"A RangeReserve implements two fundamental constraints. The first is that the sum of all reserves of contributing devices must be larger than the RangeReserve requirement. Thus, for a service s:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"sum_dinmathcalD_s r_dt + r_t^textsl ge textReqquad forall tin 1dots T quad text(for a ConstantReserve) \nsum_dinmathcalD_s r_dt + r_t^textsl ge textRequirementTimeSeriesParameter_tquad forall tin 1dots T quad text(for a VariableReserve)","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"In addition, there is a restriction on how much each contributing device d can contribute to the requirement, based on the max participation factor allowed.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"r_dt le textReq cdot textPF quad forall din mathcalD_s forall tin 1dots T quad text(for a ConstantReserve) \nr_dt le textRequirementTimeSeriesParameter_t cdot textPFquad forall din mathcalD_s forall tin 1dots T quad text(for a VariableReserve)","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"","category":"page"},{"location":"formulation_library/Service/#StepwiseCostReserve","page":"Services","title":"StepwiseCostReserve","text":"","category":"section"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Service must be used with ReserveDemandCurve PowerSystems.jl type. This service model is used to model ORDC (Operating Reserve Demand Curve) in ERCOT.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"StepwiseCostReserve","category":"page"},{"location":"formulation_library/Service/#PowerSimulations.StepwiseCostReserve","page":"Services","title":"PowerSimulations.StepwiseCostReserve","text":"Struct for to add reserves to be larger than a variable requirement depending of costs\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For each service s of the model type ReserveDemandCurve the following variables are created:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Variables:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"ActivePowerReserveVariable:\nBounds: [0.0, ]\nSymbol: r_d for d in contributing devices to the service s\nServiceRequirementVariable:\nBounds: [0.0, ]\nSymbol: textreq","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Time Series Parameters ","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For a ReserveDemandCurve PowerSystems type:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"using PowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombos = PowerSimulations.get_default_time_series_names(ReserveDemandCurve, StepwiseCostReserve)\ncombo_table = DataFrame(\n \"Parameter\" => map(x -> \"[`$x`](@ref)\", collect(keys(combos))),\n \"Default Time Series Name\" => map(x -> \"`$x`\", collect(values(combos))),\n )\nmdtable(combo_table, latex = false)","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Relevant Methods:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"mathcalD_s = PowerSystems.get_contributing_devices(system, service): Set (vector) of all contributing devices to the service s in the system.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Objective:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"The ServiceRequirementVariable is added as a piecewise linear cost based on the decreasing offers listed in the variable_cost time series. These decreasing cost represent the scarcity prices of not having sufficient reserves. For example, if the variable textreq = 0, then a really high cost is paid for not having enough reserves, and if textreq is larger, then a lower cost (or even zero) is paid.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Expressions:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Adds the ActivePowerReserveVariable for upper/lower bound expressions of contributing devices.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For ReserveUp types, the variable is added to ActivePowerRangeExpressionUB, such that this expression considers both the ActivePowerVariable and its reserve variable. Similarly, For ReserveDown types, the variable is added to ActivePowerRangeExpressionLB, such that this expression considers both the ActivePowerVariable and its reserve variable","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Example: for a thermal unit d contributing to two different ReserveUp s_1 s_2 services (e.g. Reg-Up and Spin):","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textActivePowerRangeExpressionUB_t = p_t^textth + r_s_1t + r_s_2 t le P^textthmax","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"similarly if s_3 is a ReserveDown service (e.g. Reg-Down):","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textActivePowerRangeExpressionLB_t = p_t^textth - r_s_3t ge P^textthmin","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Constraints: ","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"A StepwiseCostReserve implements a single constraint, such that the sum of all reserves of contributing devices must be larger than the ServiceRequirementVariable variable. Thus, for a service s:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"sum_dinmathcalD_s r_dt ge textreq_tquad forall tin 1dots T ","category":"page"},{"location":"formulation_library/Service/#GroupReserve","page":"Services","title":"GroupReserve","text":"","category":"section"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Service must be used with ConstantReserveGroup PowerSystems.jl type. This service model is used to model an aggregation of services.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"GroupReserve","category":"page"},{"location":"formulation_library/Service/#PowerSimulations.GroupReserve","page":"Services","title":"PowerSimulations.GroupReserve","text":"Struct to add reserves to be larger than a specified requirement for an aggregated collection of services\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For each service s of the model type GroupReserve the following variables are created:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Variables:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"No variables are created, but the services associated with the GroupReserve must have created variables.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Static Parameters","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textReq = PowerSystems.get_requirement(service)","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Relevant Methods:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"mathcalS_s = PowerSystems.get_contributing_services(system, service): Set (vector) of all contributing services to the group service s in the system.\nmathcalD_s_i = PowerSystems.get_contributing_devices(system, service_aux): Set (vector) of all contributing devices to the service s_i in the system.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Objective:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Does not modify the objective function, besides the changes to the objective function due to the other services associated to the group service.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Expressions:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"No changes, besides the changes to the expressions due to the other services associated to the group service.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Constraints:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"A GroupReserve implements that the sum of all reserves of contributing devices, of all contributing services, must be larger than the GroupReserve requirement. Thus, for a GroupReserve service s:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"sum_dinmathcalD_s_i sum_i in mathcalS_s r_dt ge textReqquad forall tin 1dots T ","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"","category":"page"},{"location":"formulation_library/Service/#RampReserve","page":"Services","title":"RampReserve","text":"","category":"section"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"RampReserve","category":"page"},{"location":"formulation_library/Service/#PowerSimulations.RampReserve","page":"Services","title":"PowerSimulations.RampReserve","text":"Struct to add reserves to be larger than a specified requirement, with ramp constraints\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For each service s of the model type RampReserve the following variables are created:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Variables:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"ActivePowerReserveVariable:\nBounds: [0.0, ]\nDefault proportional cost: 10 textSystemBasePower\nSymbol: r_d for d in contributing devices to the service s","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"If slacks are enabled:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"ReserveRequirementSlack:\nBounds: [0.0, ]\nDefault proportional cost: 1e5\nSymbol: r^textsl","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"RampReserve only accepts VariableReserve PowerSystems.jl type. With that, the parameters are:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Static Parameters","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textTF = PowerSystems.get_time_frame(service)\nR^textthup = PowerSystems.get_ramp_limits(device).up for thermal contributing devices\nR^textthdn = PowerSystems.get_ramp_limits(device).down for thermal contributing devices","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Time Series Parameters ","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For a VariableReserve PowerSystems type:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"using PowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombos = PowerSimulations.get_default_time_series_names(VariableReserve, RampReserve)\ncombo_table = DataFrame(\n \"Parameter\" => map(x -> \"[`$x`](@ref)\", collect(keys(combos))),\n \"Default Time Series Name\" => map(x -> \"`$x`\", collect(values(combos))),\n )\nmdtable(combo_table, latex = false)","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Relevant Methods:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"mathcalD_s = PowerSystems.get_contributing_devices(system, service): Set (vector) of all contributing devices to the service s in the system.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Objective:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Add a large proportional cost to the objective function if slack variables are used + r^textsl cdot 10^5. In addition adds the default cost for ActivePowerReserveVariables as a proportional cost.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Expressions:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Adds the ActivePowerReserveVariable for upper/lower bound expressions of contributing devices.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For ReserveUp types, the variable is added to ActivePowerRangeExpressionUB, such that this expression considers both the ActivePowerVariable and its reserve variable. Similarly, For ReserveDown types, the variable is added to ActivePowerRangeExpressionLB, such that this expression considers both the ActivePowerVariable and its reserve variable","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Example: for a thermal unit d contributing to two different ReserveUp s_1 s_2 services (e.g. Reg-Up and Spin):","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textActivePowerRangeExpressionUB_t = p_t^textth + r_s_1t + r_s_2 t le P^textthmax","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"similarly if s_3 is a ReserveDown service (e.g. Reg-Down):","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textActivePowerRangeExpressionLB_t = p_t^textth - r_s_3t ge P^textthmin","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Constraints: ","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"A RampReserve implements three fundamental constraints. The first is that the sum of all reserves of contributing devices must be larger than the RampReserve requirement. Thus, for a service s:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"sum_dinmathcalD_s r_dt + r_t^textsl ge textRequirementTimeSeriesParameter_tquad forall tin 1dots T","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Finally, there is a restriction based on the ramp limits of the contributing devices:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"r_dt le R^textthup cdot textTFquad forall din mathcalD_s forall tin 1dots T quad text(for ReserveUp) \nr_dt le R^textthdn cdot textTFquad forall din mathcalD_s forall tin 1dots T quad text(for ReserveDown)","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"","category":"page"},{"location":"formulation_library/Service/#NonSpinningReserve","page":"Services","title":"NonSpinningReserve","text":"","category":"section"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"NonSpinningReserve","category":"page"},{"location":"formulation_library/Service/#PowerSimulations.NonSpinningReserve","page":"Services","title":"PowerSimulations.NonSpinningReserve","text":"Struct to add non spinning reserve requirements larger than specified requirement\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For each service s of the model type NonSpinningReserve, the following variables are created:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Variables:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"ActivePowerReserveVariable:\nBounds: [0.0, ]\nDefault proportional cost: 10 textSystemBasePower\nSymbol: r_d for d in contributing devices to the service s","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"If slacks are enabled:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"ReserveRequirementSlack:\nBounds: [0.0, ]\nDefault proportional cost: 1e5\nSymbol: r^textsl","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"NonSpinningReserve only accepts VariableReserve PowerSystems.jl type. With that, the parameters are:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Static Parameters","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textPF = PowerSystems.get_max_participation_factor(service)\ntextTF = PowerSystems.get_time_frame(service)\nP^textthmin = PowerSystems.get_active_power_limits(device).min for thermal contributing devices\nT^textstup = PowerSystems.get_time_limits(d).up for thermal contributing devices\nR^textthup = PowerSystems.get_ramp_limits(device).down for thermal contributing devices","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Other parameters:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Delta T: Resolution of the problem in minutes.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Time Series Parameters ","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For a VariableReserve PowerSystems type:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"using PowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombos = PowerSimulations.get_default_time_series_names(VariableReserve, NonSpinningReserve)\ncombo_table = DataFrame(\n \"Parameter\" => map(x -> \"[`$x`](@ref)\", collect(keys(combos))),\n \"Default Time Series Name\" => map(x -> \"`$x`\", collect(values(combos))),\n )\nmdtable(combo_table, latex = false)","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Relevant Methods:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"mathcalD_s = PowerSystems.get_contributing_devices(system, service): Set (vector) of all contributing devices to the service s in the system.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Objective:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Add a large proportional cost to the objective function if slack variables are used + r^textsl cdot 10^5. In addition adds the default cost for ActivePowerReserveVariables as a proportional cost.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Expressions:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Adds the ActivePowerReserveVariable for upper/lower bound expressions of contributing devices.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For ReserveUp types, the variable is added to ActivePowerRangeExpressionUB, such that this expression considers both the ActivePowerVariable and its reserve variable. Similarly, For ReserveDown types, the variable is added to ActivePowerRangeExpressionLB, such that this expression considers both the ActivePowerVariable and its reserve variable","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Example: for a thermal unit d contributing to two different ReserveUp s_1 s_2 services (e.g. Reg-Up and Spin):","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textActivePowerRangeExpressionUB_t = p_t^textth + r_s_1t + r_s_2 t le P^textthmax","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"similarly if s_3 is a ReserveDown service (e.g. Reg-Down):","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textActivePowerRangeExpressionLB_t = p_t^textth - r_s_3t ge P^textthmin","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Constraints: ","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"A NonSpinningReserve implements three fundamental constraints. The first is that the sum of all reserves of contributing devices must be larger than the NonSpinningReserve requirement. Thus, for a service s:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"sum_dinmathcalD_s r_dt + r_t^textsl ge textRequirementTimeSeriesParameter_tquad forall tin 1dots T","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"In addition, there is a restriction on how much each contributing device d can contribute to the requirement, based on the max participation factor allowed.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"r_dt le textRequirementTimeSeriesParameter_t cdot textPFquad forall din mathcalD_s forall tin 1dots T","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Finally, there is a restriction based on the reserve response time for the non-spinning reserve if the unit is off. To do so, compute R^textlimit_d as the reserve response limit as:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"R^textlimit_d = begincases\n0 text if TF le T^textstup_d \nP^textthmin_d + (textTF_s - T^textstup_d) cdot R^textthup_d Delta T cdot R^textthup_d text if TF T^textstup_d\nendcases quad forall din mathcalD_s","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Then, the constraint depends on the commitment variable u_t^textth as:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"r_dt le (1 - u_dt^textth) cdot R^textlimit_d quad forall d in mathcalD_s forall t in 1dots T","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"","category":"page"},{"location":"formulation_library/Service/#ConstantMaxInterfaceFlow","page":"Services","title":"ConstantMaxInterfaceFlow","text":"","category":"section"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"This Service model only accepts the PowerSystems.jl TransmissionInterface type to properly function. It is used to model a collection of branches that make up an interface or corridor with a maximum transfer of power.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"ConstantMaxInterfaceFlow","category":"page"},{"location":"formulation_library/Service/#PowerSimulations.ConstantMaxInterfaceFlow","page":"Services","title":"PowerSimulations.ConstantMaxInterfaceFlow","text":"Struct to add a constant maximum transmission flow for specified interface\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Variables","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"If slacks are used:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"InterfaceFlowSlackUp:\nBounds: [0.0, ]\nSymbol: f^textslup\nInterfaceFlowSlackDown:\nBounds: [0.0, ]\nSymbol: f^textsldn","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Static Parameters","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"F^textmax = PowerSystems.get_active_power_flow_limits(service).max\nF^textmin = PowerSystems.get_active_power_flow_limits(service).min\nC^textflow = PowerSystems.get_violation_penalty(service)\nmathcalM_s = PowerSystems.get_direction_mapping(service). Dictionary of contributing branches with its specified direction (textDir_d = 1 or textDir_d = -1) with respect to the interface.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Relevant Methods","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"mathcalD_s = PowerSystems.get_contributing_devices(system, service): Set (vector) of all contributing branches to the service s in the system.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Objective:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Add the violation penalty proportional cost to the objective function if slack variables are used + (f^textslup + f^textsldn) cdot C^textflow.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Expressions:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Creates the expression InterfaceTotalFlow to keep track of all FlowActivePowerVariable of contributing branches to the transmission interface.","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Constraints:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"It adds the constraint to limit the InterfaceTotalFlow by the specified bounds of the service s:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"F^textmin le f^textslup_t - f^textsldn_t + sum_dinmathcalD_s textDir_d f_dt le F^textmax quad forall t in 1dotsT","category":"page"},{"location":"formulation_library/Service/#Changes-on-Expressions-due-to-Service-models","page":"Services","title":"Changes on Expressions due to Service models","text":"","category":"section"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"It is important to note that by adding a service to a Optimization Problem, variables for each contributing device must be created. For example, for every contributing generator d in mathcalD that is participating in services s_1s_2s_3, it is required to create three set of ActivePowerReserveVariable variables:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"r_s_1dt r_s_2dt r_s_3dtquad forall d in mathcalD forall t in 1dots T","category":"page"},{"location":"formulation_library/Service/#Changes-on-UpperBound-(UB)-and-LowerBound-(LB)-limits","page":"Services","title":"Changes on UpperBound (UB) and LowerBound (LB) limits","text":"","category":"section"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"Each contributing generator d has active power limits that the reserve variables affect. In simple terms, the limits are implemented using expressions ActivePowerRangeExpressionUB and ActivePowerRangeExpressionLB as:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"textActivePowerRangeExpressionUB_t le P^textmax \ntextActivePowerRangeExpressionLB_t ge P^textmin","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"ReserveUp type variables contribute to the upper bound expression, while ReserveDown variables contribute to the lower bound expressions. So if s_1s_2 are ReserveUp services, and s_3 is a ReserveDown service, then for a thermal generator d using a ThermalStandardDispatch:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"beginalign*\n p_dt^textth + r_s_1dt + r_s_2dt le P^textthmaxquad forall din mathcalD^textth forall t in 1dotsT \n p_dt^textth - r_s_3dt ge P^textthminquad forall din mathcalD^textth forall t in 1dotsT\nendalign*","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"while for a renewable generator d using a RenewableFullDispatch:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"beginalign*\n p_dt^textre + r_s_1dt + r_s_2dt le textActivePowerTimeSeriesParameter_tquad forall din mathcalD^textre forall t in 1dotsT\n p_dt^textre - r_s_3dt ge 0quad forall din mathcalD^textre forall t in 1dotsT\nendalign*","category":"page"},{"location":"formulation_library/Service/#Changes-in-Ramp-limits","page":"Services","title":"Changes in Ramp limits","text":"","category":"section"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"For the case of Ramp Limits (of formulation that model these limits), the reserve variables only affect the current time, and not the previous time. Then, for the same example as before:","category":"page"},{"location":"formulation_library/Service/","page":"Services","title":"Services","text":"beginalign*\n p_dt^textth + r_s_1dt + r_s_2dt - p_dt-1^textthle R^textthupquad forall din mathcalD^textth forall t in 1dotsT\n p_dt^textth - r_s_3dt - p_dt-1^textth ge -R^textthdnquad forall din mathcalD^textth forall t in 1dotsT\nendalign*","category":"page"},{"location":"model_developer_guide/structure_of_operation_problem/#Structure-of-an-operations-problem-model","page":"Operation Problem Structure","title":"Structure of an operations problem model","text":"","category":"section"},{"location":"model_developer_guide/structure_of_operation_problem/","page":"Operation Problem Structure","title":"Operation Problem Structure","text":"In most cases operation problem models are optimization models. Although in PowerSimulations.jl it is possible to define arbitrary problems that can reflect heuristic decision rules, this is not the common case. This page focuses on explaining the structure of operations problems that employ an optimization problem and solver.","category":"page"},{"location":"model_developer_guide/structure_of_operation_problem/","page":"Operation Problem Structure","title":"Operation Problem Structure","text":"The first aspect to consider when thinking about developing a model compatible with PowerSimulations.jl is that although we support all of JuMP.jl objects, you need to employ anonymous constraints and variables in JuMP and register the constraints, variables and other optimization objects into PowerSimulations.jl's optimization container. Otherwise the features to use your problem in the simulation like the coordination with other problems and post processing won't work.","category":"page"},{"location":"model_developer_guide/structure_of_operation_problem/","page":"Operation Problem Structure","title":"Operation Problem Structure","text":"info: Info\nThe requirements for the simulation of Power Systems operations are more strict than solving an optimization problem once with just JuMP.jl. The requirements imposed by PowerSimulations.jl to integrate your models in a simulation are designed to help with other complex operations that go beyond JuMP.jl scope.","category":"page"},{"location":"model_developer_guide/structure_of_operation_problem/","page":"Operation Problem Structure","title":"Operation Problem Structure","text":"warning: Warning\nAll the code in this page is considered \"pseudo-code\". Copy-paste will likely not work out of the box. You need to develop the internals of the functions correctly for the examples below to work.","category":"page"},{"location":"model_developer_guide/structure_of_operation_problem/#Registering-a-variable-in-the-model","page":"Operation Problem Structure","title":"Registering a variable in the model","text":"","category":"section"},{"location":"model_developer_guide/structure_of_operation_problem/","page":"Operation Problem Structure","title":"Operation Problem Structure","text":"To register a variable in the model, the developer must first allocate the container into the optimization container and then populate it. For example, it require start the build function as follows:","category":"page"},{"location":"model_developer_guide/structure_of_operation_problem/","page":"Operation Problem Structure","title":"Operation Problem Structure","text":"info: Info\nWe recommend calling import PowerSimulations and defining the constant CONST PSI = PowerSimulations to make it easier to read the code and determine which package is responsible for defining the functions.","category":"page"},{"location":"model_developer_guide/structure_of_operation_problem/","page":"Operation Problem Structure","title":"Operation Problem Structure","text":" function PSI.build_model!(model::PSI.DecisionModel{MyCustomModel})\n container = PSI.get_optimization_container(model)\n PSI.set_time_steps!(container, 1:24)\n\n # Create the container for the variable\n variable = PSI.add_variable_container!(\n container,\n PSI.ActivePowerVariable(), # <- This variable is defined in PowerSimulations but the user can define their own\n PSY.ThermalGeneration, # <- Device type for the variable. Can be from PSY or custom defined\n devices_names, # <- First container dimension\n time_steps, # <- Second container dimension\n )\n\n # Iterate over the devices and time to store the JuMP variables into the container.\n for t in time_steps, d in devices\n name = PSY.get_name(d)\n variable[name, t] = JuMP.@variable(get_jump_model(container))\n # It is possible to use PSY getter functions to retrieve data from the generators\n # Any other variable property can be specified inside this loop.\n JuMP.set_upper_bound(variable[name, t], UB_DATA) # <- Optional\n JuMP.set_lower_bound(variable[name, t], LB_DATA) # <- Optional\n end\n\n return\n end","category":"page"},{"location":"model_developer_guide/troubleshooting/#Troubleshooting-model-development","page":"Troubleshooting","title":"Troubleshooting model development","text":"","category":"section"},{"location":"formulation_library/README/#Formulation-documentation-guide","page":"Formulation documentation guide","title":"Formulation documentation guide","text":"","category":"section"},{"location":"formulation_library/README/","page":"Formulation documentation guide","title":"Formulation documentation guide","text":"Formulation documentation should roughly follow the template established by RenewableGen.md","category":"page"},{"location":"formulation_library/README/#Auto-generated-items","page":"Formulation documentation guide","title":"Auto generated items","text":"","category":"section"},{"location":"formulation_library/README/","page":"Formulation documentation guide","title":"Formulation documentation guide","text":"Valid DeviceModel table: just change the device category in the filter function\nTime Series Parameters: just change the device category and formulation in the get_default_time_series_names method call","category":"page"},{"location":"formulation_library/README/#Linked-items","page":"Formulation documentation guide","title":"Linked items","text":"","category":"section"},{"location":"formulation_library/README/","page":"Formulation documentation guide","title":"Formulation documentation guide","text":"Formulations in the Valid DeviceModel table must have a docstring in src/core/formulations.jl\nThe Formulation in the @docs block must have a docstring in src/core/formulations.jl\nThe Variables must have docstrings in src/core/variables.jl \nThe Time Series Parameters must have docstrings in src/core/parameters.jl","category":"page"},{"location":"tutorials/pcm_simulation/#pcm_tutorial","page":"Multi-stage Production Cost Simulation","title":"Sequential Simulations with PowerSimulations.jl","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"Originally Contributed by: Clayton Barrows","category":"page"},{"location":"tutorials/pcm_simulation/#Introduction","page":"Multi-stage Production Cost Simulation","title":"Introduction","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"PowerSimulations.jl supports simulations that consist of sequential optimization problems where results from previous problems inform subsequent problems in a variety of ways. This example demonstrates some of these capabilities to represent electricity market clearing. This example is intended to be an extension of the OperationsProblem tutorial.","category":"page"},{"location":"tutorials/pcm_simulation/#Load-Packages","page":"Multi-stage Production Cost Simulation","title":"Load Packages","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"using PowerSystems\nusing PowerSimulations\nusing HydroPowerSimulations\nconst PSI = PowerSimulations\nusing PowerSystemCaseBuilder\nusing Dates\nusing HiGHS #solver","category":"page"},{"location":"tutorials/pcm_simulation/#Optimizer","page":"Multi-stage Production Cost Simulation","title":"Optimizer","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"It's most convenient to define an optimizer instance upfront and pass it into the DecisionModel constructor. For this example, we can use the free HiGHS solver with a relatively relaxed MIP gap (ratioGap) setting to improve speed.","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"solver = optimizer_with_attributes(HiGHS.Optimizer, \"mip_rel_gap\" => 0.5)","category":"page"},{"location":"tutorials/pcm_simulation/#Hourly-day-ahead-system","page":"Multi-stage Production Cost Simulation","title":"Hourly day-ahead system","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"First, we'll create a System with hourly data to represent day-ahead forecasted wind, solar, and load profiles:","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"sys_DA = build_system(PSISystems, \"modified_RTS_GMLC_DA_sys\"; skip_serialization = true)","category":"page"},{"location":"tutorials/pcm_simulation/#Minute-system","page":"Multi-stage Production Cost Simulation","title":"5-Minute system","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"The RTS data also includes 5-minute resolution time series data. So, we can create another System to represent 15 minute ahead forecasted data for a \"real-time\" market:","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"sys_RT = build_system(PSISystems, \"modified_RTS_GMLC_RT_sys\"; skip_serialization = true)","category":"page"},{"location":"tutorials/pcm_simulation/#ProblemTemplates-define-stages","page":"Multi-stage Production Cost Simulation","title":"ProblemTemplates define stages","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"Sequential simulations in PowerSimulations are created by defining OperationsProblems that represent stages, and how information flows between executions of a stage and between different stages.","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"Let's start by defining a two stage simulation that might look like a typical day-Ahead and real-time electricity market clearing process.","category":"page"},{"location":"tutorials/pcm_simulation/#Day-ahead-unit-commitment-stage","page":"Multi-stage Production Cost Simulation","title":"Day-ahead unit commitment stage","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"First, we can define a unit commitment template for the day ahead problem. We can use the included UC template, but in this example, we'll replace the ThermalBasicUnitCommitment with the slightly more complex ThermalStandardUnitCommitment for the thermal generators.","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"template_uc = template_unit_commitment()\nset_device_model!(template_uc, ThermalStandard, ThermalStandardUnitCommitment)\nset_device_model!(template_uc, HydroDispatch, HydroDispatchRunOfRiver)","category":"page"},{"location":"tutorials/pcm_simulation/#Define-the-reference-model-for-the-real-time-economic-dispatch","page":"Multi-stage Production Cost Simulation","title":"Define the reference model for the real-time economic dispatch","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"In addition to the manual specification process demonstrated in the OperationsProblem example, PSI also provides pre-specified templates for some standard problems:","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"template_ed = template_economic_dispatch(\n network = NetworkModel(PTDFPowerModel, use_slacks = true),\n)","category":"page"},{"location":"tutorials/pcm_simulation/#Define-the-SimulationModels","page":"Multi-stage Production Cost Simulation","title":"Define the SimulationModels","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"DecisionModels define the problems that are executed in the simulation. The actual problem will change as the stage gets updated to represent different time periods, but the formulations applied to the components is constant within a stage. In this case, we want to define two stages with the ProblemTemplates and the Systems that we've already created.","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"models = SimulationModels(\n decision_models = [\n DecisionModel(template_uc, sys_DA, optimizer = solver, name = \"UC\"),\n DecisionModel(template_ed, sys_RT, optimizer = solver, name = \"ED\"),\n ],\n)","category":"page"},{"location":"tutorials/pcm_simulation/#SimulationSequence","page":"Multi-stage Production Cost Simulation","title":"SimulationSequence","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"Similar to an ProblemTemplate, the SimulationSequence provides a template of how to execute a sequential set of operations problems.","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"Let's review some of the SimulationSequence arguments.","category":"page"},{"location":"tutorials/pcm_simulation/#Chronologies","page":"Multi-stage Production Cost Simulation","title":"Chronologies","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"In PowerSimulations, chronologies define where information is flowing. There are two types of chronologies.","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"inter-stage chronologies: Define how information flows between stages. e.g. day-ahead solutions are used to inform economic dispatch problems\nintra-stage chronologies: Define how information flows between multiple executions of a single stage. e.g. the dispatch setpoints of the first period of an economic dispatch problem are constrained by the ramping limits from setpoints in the final period of the previous problem.","category":"page"},{"location":"tutorials/pcm_simulation/#FeedForward","page":"Multi-stage Production Cost Simulation","title":"FeedForward","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"The definition of exactly what information is passed using the defined chronologies is accomplished with FeedForward. Specifically, FeedForward is used to define what to do with information being passed with an inter-stage chronology. Let's define a FeedForward that affects the semi-continuous range constraints of thermal generators in the economic dispatch problems based on the value of the unit-commitment variables.","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"feedforward = Dict(\n \"ED\" => [\n SemiContinuousFeedforward(\n component_type = ThermalStandard,\n source = OnVariable,\n affected_values = [ActivePowerVariable],\n ),\n ],\n)","category":"page"},{"location":"tutorials/pcm_simulation/#Sequencing","page":"Multi-stage Production Cost Simulation","title":"Sequencing","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"The stage problem length, look-ahead, and other details surrounding the temporal Sequencing of stages are controlled using the structure of the time series data in the Systems. So, to define a typical day-ahead - real-time sequence:","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"Day ahead problems should represent 48 hours, advancing 24 hours after each execution (24-hour look-ahead)\nReal time problems should represent 1 hour (12 5-minute periods), advancing 15 min after each execution (15 min look-ahead)","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"We can adjust the time series data to reflect this structure in each System:","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"transform_single_time_series!(sys_DA, 48, Hour(1))\ntransform_single_time_series!(sys_RT, 12, Minute(15))","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"Now we can put it all together to define a SimulationSequence","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"DA_RT_sequence = SimulationSequence(\n models = models,\n ini_cond_chronology = InterProblemChronology(),\n feedforwards = feedforward,\n)","category":"page"},{"location":"tutorials/pcm_simulation/#Simulation","page":"Multi-stage Production Cost Simulation","title":"Simulation","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"Now, we can build and execute a simulation using the SimulationSequence and Stages that we've defined.","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"path = mkdir(joinpath(\".\", \"rts-store\")) #hide\nsim = Simulation(\n name = \"rts-test\",\n steps = 2,\n models = models,\n sequence = DA_RT_sequence,\n simulation_folder = joinpath(\".\", \"rts-store\"),\n)","category":"page"},{"location":"tutorials/pcm_simulation/#Build-simulation","page":"Multi-stage Production Cost Simulation","title":"Build simulation","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"build!(sim)","category":"page"},{"location":"tutorials/pcm_simulation/#Execute-simulation","page":"Multi-stage Production Cost Simulation","title":"Execute simulation","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"the following command returns the status of the simulation (0: is proper execution) and stores the results in a set of HDF5 files on disk.","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"execute!(sim, enable_progress_bar = false)","category":"page"},{"location":"tutorials/pcm_simulation/#Results","page":"Multi-stage Production Cost Simulation","title":"Results","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"To access the results, we need to load the simulation result metadata and then make requests to the specific data of interest. This allows you to efficiently access the results of interest without overloading resources.","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"results = SimulationResults(sim);\nuc_results = get_decision_problem_results(results, \"UC\"); # UC stage result metadata\ned_results = get_decision_problem_results(results, \"ED\"); # ED stage result metadata","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"We can read all the result variables","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"read_variables(uc_results)","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"or all the parameters","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"read_parameters(uc_results)","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"We can just list the variable names contained in uc_results:","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"list_variable_names(uc_results)","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"and a number of parameters (this pattern also works for aux_variables, expressions, and duals)","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"list_parameter_names(uc_results)","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"Now we can read the specific results of interest for a specific problem, time window (optional), and set of variables, duals, or parameters (optional)","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"Dict([\n v => read_variable(uc_results, v) for v in [\n \"ActivePowerVariable__RenewableDispatch\",\n \"ActivePowerVariable__HydroDispatch\",\n \"StopVariable__ThermalStandard\",\n ]\n])","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"Or if we want the result of just one variable, parameter, or dual (must be defined in the problem definition), we can use:","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"read_parameter(\n ed_results,\n \"ActivePowerTimeSeriesParameter__RenewableNonDispatch\",\n initial_time = DateTime(\"2020-01-01T06:00:00\"),\n count = 5,\n)","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"info: Info\n","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"note that this returns the results of each execution step in a separate dataframe If you want the realized results (without lookahead periods), you can call read_realized_*:","category":"page"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"read_realized_variables(\n uc_results,\n [\"ActivePowerVariable__ThermalStandard\", \"ActivePowerVariable__RenewableDispatch\"],\n)\nrm(path, force = true, recursive = true) #hide","category":"page"},{"location":"tutorials/pcm_simulation/#Plotting","page":"Multi-stage Production Cost Simulation","title":"Plotting","text":"","category":"section"},{"location":"tutorials/pcm_simulation/","page":"Multi-stage Production Cost Simulation","title":"Multi-stage Production Cost Simulation","text":"Take a look at the plotting capabilities in PowerGraphics.jl","category":"page"},{"location":"modeler_guide/running_a_simulation/#running_a_simulation","page":"Simulation","title":"Simulation","text":"","category":"section"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"tip: Always try to solve the operations problem first before putting together the simulation\nIt is not uncommon that when trying to solve a complex simulation the resulting models are infeasible. This situation can be the result of many factors like the input data, the incorrect specification of the initial conditions for models with time dependencies or a poorly specified model. Therefore, it's highly recommended to run and analyze an Operations Problems that reflect the problems that will be included in a simulation prior to executing a simulation.","category":"page"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"Check out the Operations Problem Tutorial","category":"page"},{"location":"modeler_guide/running_a_simulation/#Feedforward","page":"Simulation","title":"Feedforward","text":"","category":"section"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"The definition of exactly what information is passed using the defined chronologies is accomplished using FeedForwards.","category":"page"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"Specifically, a FeedForward is used to define what to do with information being passed with an inter-stage chronology in a Simulation. The most common FeedForward is the SemiContinuousFeedForward that affects the semi-continuous range constraints of thermal generators in the economic dispatch problems based on the value of the (already solved) unit-commitment variables.","category":"page"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"The creation of a FeedForward requires at least to specify the component_type on which the FeedForward will be applied. The source variable specify which variable will be taken from the problem solved, for example the commitment variable of the thermal unit in the unit commitment problem. Finally, the affected_values specify which variables will be affected in the problem to be solved, for example the next economic dispatch problem.","category":"page"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"The following code specify the creation of semi-continuous range constraints on the ActivePowerVariable based on the solution of the commitment variable OnVariable for all ThermalStandard units.","category":"page"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"SemiContinuousFeedforward(\n component_type=ThermalStandard,\n source=OnVariable,\n affected_values=[ActivePowerVariable],\n)","category":"page"},{"location":"modeler_guide/running_a_simulation/#Chronologies","page":"Simulation","title":"Chronologies","text":"","category":"section"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"In PowerSimulations, chronologies define where information is flowing. There are two types of chronologies.","category":"page"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"inter-stage chronologies: Define how information flows between stages. e.g. day-ahead solutions are used to inform economic dispatch problems\nintra-stage chronologies: Define how information flows between multiple executions of a single stage. e.g. the dispatch setpoints of the first period of an economic dispatch problem are constrained by the ramping limits from setpoints in the final period of the previous problem.","category":"page"},{"location":"modeler_guide/running_a_simulation/#Sequencing","page":"Simulation","title":"Sequencing","text":"","category":"section"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"In a typical simulation pipeline, we want to connect daily (24-hours) day-ahead unit commitment problems, with multiple economic dispatch problems. Usually, our day-ahead unit commitment problem will have an hourly (1-hour) resolution, while the economic dispatch will have a 5-minute resolution.","category":"page"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"Depending on your problem, it is common to use a 2-day look-ahead for unit commitment problems, so in this case, the Day-Ahead problem will have: resolution = Hour(1) with interval = Hour(24) and horizon = Hour(48). In the case of the economic dispatch problem, it is common to use a look-ahead of two hours. Thus, the Real-Time problem will have: resolution = Minute(5), with interval = Minute(5) (we only store the first operating point) and horizon = 24 (24 time steps of 5 minutes are 120 minutes, that is 2 hours).","category":"page"},{"location":"modeler_guide/running_a_simulation/#Simulation-Setup","page":"Simulation","title":"Simulation Setup","text":"","category":"section"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"The following code creates the entire simulation pipeline:","category":"page"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"# We assume that the templates for UC and ED are ready\n# sys_da has the resolution of 1 hour:\n# with the 24 hours interval and horizon of 48 hours.\n# sys_rt has the resolution of 5 minutes:\n# with a 5-minute interval and horizon of 2 hours (24 time steps)\n\n# Create the UC Decision Model\ndecision_model_uc = DecisionModel(\n template_uc,\n sys_da;\n name=\"UC\",\n optimizer=optimizer_with_attributes(\n Xpress.Optimizer,\n \"MIPRELSTOP\" => 1e-1,\n ),\n)\n\n# Create the ED Decision Model\ndecision_model_ed = DecisionModel(\n template_ed,\n sys_rt;\n name=\"ED\",\n optimizer=optimizer_with_attributes(Xpress.Optimizer),\n)\n\n# Specify the SimulationModels using a Vector of decision_models: UC, ED\nsim_models = SimulationModels(\n decision_models=[\n decision_model_uc,\n decision_model_ed,\n ],\n)\n\n# Create the FeedForwards:\nsemi_ff = SemiContinuousFeedforward(\n component_type=ThermalStandard,\n source=OnVariable,\n affected_values=[ActivePowerVariable],\n)\n\n# Specify the sequencing:\nsim_sequence = SimulationSequence(\n # Specify the vector of decision models: sim_models\n models=sim_models,\n # Specify a Dict of feedforwards on which the FF applies\n # based on the DecisionModel name, in this case \"ED\"\n feedforwards=Dict(\n \"ED\" => [semi_ff],\n ),\n # Specify the chronology, in this case inter-stage\n ini_cond_chronology=InterProblemChronology(),\n)\n\n# Construct the simulation:\nsim = Simulation(\n name=\"compact_sim\",\n steps=10, # 10 days\n models=sim_models,\n sequence=sim_sequence,\n # Specify the start_time as a DateTime: e.g. DateTime(\"2020-10-01T00:00:00\")\n initial_time=start_time,\n # Specify a temporary folder to avoid storing logs if not needed\n simulation_folder=mktempdir(cleanup=true),\n)\n\n# Build the decision models and simulation setup\nbuild!(sim)\n\n# Execute the simulation using the Optimizer specified in each DecisionModel\nexecute!(sim, enable_progress_bar=true)","category":"page"},{"location":"modeler_guide/running_a_simulation/","page":"Simulation","title":"Simulation","text":"Check the PCM tutorial for a more detailed tutorial on executing a simulation in a production cost modeling (PCM) environment.","category":"page"},{"location":"tutorials/adding_new_device_formulation/#Adding-Device-Formulations","page":"Adding Device Formulations","title":"Adding Device Formulations","text":"","category":"section"},{"location":"formulation_library/Feedforward/#ff_formulations","page":"Feedforwards","title":"FeedForward Formulations","text":"","category":"section"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"FeedForwards are the mechanism to define how information is shared between models. Specifically, a FeedForward defines what to do with information passed with an inter-stage chronology in a Simulation. The most common FeedForward is the SemiContinuousFeedForward that affects the semi-continuous range constraints of thermal generators in the economic dispatch problems based on the value of the (already solved) unit-commitment variables.","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"The creation of a FeedForward requires at least specifying the component_type on which the FeedForward will be applied. The source variable specifies which variable will be taken from the problem solved, for example, the commitment variable of the thermal unit in the unit commitment problem. Finally, the affected_values specify which variables will be affected in the problem to be solved, for example, the next economic dispatch problem.","category":"page"},{"location":"formulation_library/Feedforward/#Table-of-contents","page":"Feedforwards","title":"Table of contents","text":"","category":"section"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"SemiContinuousFeedforward\nFixValueFeedforward\nUpperBoundFeedforward\nLowerBoundFeedforward","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"","category":"page"},{"location":"formulation_library/Feedforward/#SemiContinuousFeedforward","page":"Feedforwards","title":"SemiContinuousFeedforward","text":"","category":"section"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"SemiContinuousFeedforward","category":"page"},{"location":"formulation_library/Feedforward/#PowerSimulations.SemiContinuousFeedforward","page":"Feedforwards","title":"PowerSimulations.SemiContinuousFeedforward","text":"SemiContinuousFeedforward(\n component_type::Type{<:PSY.Component},\n source::Type{T},\n affected_values::Vector{DataType},\n meta = CONTAINER_KEY_EMPTY_META\n) where {T}\n\nIt allows to enable/disable bounds to 0.0 for a specified variable. Commonly used to limit the ActivePowerVariable in an Economic Dispatch problem by the commitment decision taken in an another problem (typically a Unit Commitment problem).\n\nArguments:\n\ncomponent_type::Type{<:PSY.Component} : Specify the type of component on which the Feedforward will be applied\nsource::Type{T} : Specify the VariableType, ParameterType or AuxVariableType as the source of values for the Feedforward\naffected_values::Vector{DataType} : Specify the variable on which the semicontinuous limit will be applied using the source values\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Variables:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"No variables are created","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Parameters:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"texton^textth = OnStatusParameter obtained from the source variable, typically the commitment variable of the unit commitment problem u^textth.","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Objective:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"No changes to the objective function.","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Expressions:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Adds -texton^textthP^textthmax to the ActivePowerRangeExpressionUB expression and -texton^textthP^textthmin to the ActivePowerRangeExpressionLB expression.","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Constraints:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Limits the ActivePowerRangeExpressionUB and ActivePowerRangeExpressionLB by zero as:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"beginalign*\n textActivePowerRangeExpressionUB_t = p_t^textth - texton_t^textthP^textthmax le 0 quad forall tin 1 dots T \n textActivePowerRangeExpressionLB_t = p_t^textth - texton_t^textthP^textthmin ge 0 quad forall tin 1 dots T \nendalign*","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Thus, if the commitment parameter is zero, the dispatch is limited to zero, forcing to turn off the generator without introducing binary variables in the economic dispatch problem.","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"","category":"page"},{"location":"formulation_library/Feedforward/#FixValueFeedforward","page":"Feedforwards","title":"FixValueFeedforward","text":"","category":"section"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"FixValueFeedforward","category":"page"},{"location":"formulation_library/Feedforward/#PowerSimulations.FixValueFeedforward","page":"Feedforwards","title":"PowerSimulations.FixValueFeedforward","text":"FixValueFeedforward(\n component_type::Type{<:PSY.Component},\n source::Type{T},\n affected_values::Vector{DataType},\n meta = CONTAINER_KEY_EMPTY_META\n) where {T}\n\nFixes a Variable or Parameter Value in the model from another problem. Is the only Feed Forward that can be used with a Parameter or a Variable as the affected value.\n\nArguments:\n\ncomponent_type::Type{<:PSY.Component} : Specify the type of component on which the Feedforward will be applied\nsource::Type{T} : Specify the VariableType, ParameterType or AuxVariableType as the source of values for the Feedforward\naffected_values::Vector{DataType} : Specify the variable on which the fix value will be applied using the source values\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Variables:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"No variables are created","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Parameters:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"The parameter FixValueParameter is used to match the result obtained from the source variable (from the simulation state).","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Objective:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"No changes to the objective function.","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Expressions:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"No changes on expressions.","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Constraints:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Set the VariableType from the affected_values to be equal to the source parameter store in FixValueParameter","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"beginalign*\n textAffectedVariable_t = textSourceVariableParameter_t quad forall t in 1dots T\nendalign*","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"","category":"page"},{"location":"formulation_library/Feedforward/#UpperBoundFeedforward","page":"Feedforwards","title":"UpperBoundFeedforward","text":"","category":"section"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"UpperBoundFeedforward","category":"page"},{"location":"formulation_library/Feedforward/#PowerSimulations.UpperBoundFeedforward","page":"Feedforwards","title":"PowerSimulations.UpperBoundFeedforward","text":"UpperBoundFeedforward(\n component_type::Type{<:PSY.Component},\n source::Type{T},\n affected_values::Vector{DataType},\n add_slacks::Bool = false,\n meta = CONTAINER_KEY_EMPTY_META\n) where {T}\n\nConstructs a parameterized upper bound constraint to implement feedforward from other models.\n\nArguments:\n\ncomponent_type::Type{<:PSY.Component} : Specify the type of component on which the Feedforward will be applied\nsource::Type{T} : Specify the VariableType, ParameterType or AuxVariableType as the source of values for the Feedforward\naffected_values::Vector{DataType} : Specify the variable on which the upper bound will be applied using the source values\nadd_slacks::Bool = false : Add slacks variables to relax the upper bound constraint.\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Variables:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"If slack variables are enabled:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"UpperBoundFeedForwardSlack\nBounds: [0.0, ]\nDefault proportional cost: 1e6\nSymbol: p^textffubsl","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Parameters:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"The parameter UpperBoundValueParameter stores the result obtained from the source variable (from the simulation state) that will be used as an upper bound to the affected variable.","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Objective:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"The slack variable is added to the objective function using its large default cost + p^textffubsl cdot 10^6","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Expressions:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"No changes on expressions.","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Constraints:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Set the VariableType from the affected_values to be lower than the source parameter store in UpperBoundValueParameter.","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"beginalign*\n textAffectedVariable_t - p_t^textffubsl le textSourceVariableParameter_t quad forall t in 1dots T\nendalign*","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"","category":"page"},{"location":"formulation_library/Feedforward/#LowerBoundFeedforward","page":"Feedforwards","title":"LowerBoundFeedforward","text":"","category":"section"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"LowerBoundFeedforward","category":"page"},{"location":"formulation_library/Feedforward/#PowerSimulations.LowerBoundFeedforward","page":"Feedforwards","title":"PowerSimulations.LowerBoundFeedforward","text":"LowerBoundFeedforward(\n component_type::Type{<:PSY.Component},\n source::Type{T},\n affected_values::Vector{DataType},\n add_slacks::Bool = false,\n meta = CONTAINER_KEY_EMPTY_META\n) where {T}\n\nConstructs a parameterized lower bound constraint to implement feedforward from other models.\n\nArguments:\n\ncomponent_type::Type{<:PSY.Component} : Specify the type of component on which the Feedforward will be applied\nsource::Type{T} : Specify the VariableType, ParameterType or AuxVariableType as the source of values for the Feedforward\naffected_values::Vector{DataType} : Specify the variable on which the lower bound will be applied using the source values\nadd_slacks::Bool = false : Add slacks variables to relax the lower bound constraint.\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Variables:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"If slack variables are enabled:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"LowerBoundFeedForwardSlack\nBounds: [0.0, ]\nDefault proportional cost: 1e6\nSymbol: p^textfflbsl","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Parameters:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"The parameter LowerBoundValueParameter stores the result obtained from the source variable (from the simulation state) that will be used as a lower bound to the affected variable.","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Objective:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"The slack variable is added to the objective function using its large default cost + p^textfflbsl cdot 10^6","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Expressions:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"No changes on expressions.","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Constraints:","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"Set the VariableType from the affected_values to be greater than the source parameter store in LowerBoundValueParameter.","category":"page"},{"location":"formulation_library/Feedforward/","page":"Feedforwards","title":"Feedforwards","text":"beginalign*\n textAffectedVariable_t + p_t^textfflbsl ge textSourceVariableParameter_t quad forall t in 1dots T\nendalign*","category":"page"},{"location":"#PowerSimulations.jl","page":"Welcome Page","title":"PowerSimulations.jl","text":"","category":"section"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"CurrentModule = PowerSimulations","category":"page"},{"location":"#Overview","page":"Welcome Page","title":"Overview","text":"","category":"section"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"PowerSimulations.jl is a power system operations simulation tool developed as a flexible and open source software for quasi-static power systems simulations including Production Cost Models. PowerSimulations.jl tackles the issues of developing a simulation model in a modular way providing tools for the formulation of decision models and emulation models that can be solved independently or in an interconnected fashion.","category":"page"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"PowerSimulations.jl supports the workflows to develop simulations by separating the development of operations models and simulation models.","category":"page"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"Operation Models: Optimization model used to find the solution of an operation problem.\nSimulations Models: Defined the requirements to find solutions to a sequence of operation problems in a way that resembles the procedures followed by operators.","category":"page"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"The most common Simulation Model is the solution of a Unit Commitment and Economic Dispatch sequence of problems. This model is used in commercial Production Cost Modeling tools, but it has a limited scope of analysis.","category":"page"},{"location":"#How-the-documentation-is-structured","page":"Welcome Page","title":"How the documentation is structured","text":"","category":"section"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"PowerSimulations.jl documentation and code are organized according to the needs of different users depending on their skillset and requirements. In broad terms there are three categories:","category":"page"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"Modeler: Users that want to solve an operations problem or run a simulation using the existing models in PowerSimulations.jl. For instance, answer questions about the change in operation costs in future fuel mixes. Check the formulations library page to choose a modeling strategy that fits your needs.\nModel Developer: Users that want to develop custom models and workflows for the simulation of a power system operation. For instance, study the impacts of an stochastic optimization problem over a deterministic.\nCode Base Developers: Users that want to add new core functionalities or fix bugs in the core capabilities of PowerSimulations.jl.","category":"page"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"PowerSimulations.jl is an active project under development, and we welcome your feedback, suggestions, and bug reports.","category":"page"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"Note: PowerSimulations.jl uses the data model implemented in PowerSystems.jl to construct optimization models. In most cases, you need to add PowerSystems.jl to your scripts.","category":"page"},{"location":"#Installation","page":"Welcome Page","title":"Installation","text":"","category":"section"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"The latest stable release of PowerSimulations can be installed using the Julia package manager with","category":"page"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"] add PowerSimulations","category":"page"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"For the current development version, \"checkout\" this package with","category":"page"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"] add PowerSimulations#main","category":"page"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"An appropriate optimization solver is required for running PowerSimulations models. Refer to JuMP.jl solver's page to select the most appropriate for the application of interest.","category":"page"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"","category":"page"},{"location":"","page":"Welcome Page","title":"Welcome Page","text":"PowerSystems has been developed as part of the Scalable Integrated Infrastructure Planning (SIIP) initiative at the U.S. Department of Energy's National Renewable Energy Laboratory (NREL).","category":"page"},{"location":"formulation_library/Load/#PowerSystems.ElectricLoad-Formulations","page":"Load","title":"PowerSystems.ElectricLoad Formulations","text":"","category":"section"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Electric load formulations define the optimization models that describe load units (demand) mathematical model in different operational settings, such as economic dispatch and unit commitment.","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"note: Note\nThe use of reactive power variables and constraints will depend on the network model used, i.e., whether it uses (or does not use) reactive power. If the network model is purely active power-based, reactive power variables and related constraints are not created.","category":"page"},{"location":"formulation_library/Load/#Table-of-contents","page":"Load","title":"Table of contents","text":"","category":"section"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"StaticPowerLoad\nPowerLoadInterruption\nPowerLoadDispatch\nValid configurations","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"","category":"page"},{"location":"formulation_library/Load/#StaticPowerLoad","page":"Load","title":"StaticPowerLoad","text":"","category":"section"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"StaticPowerLoad","category":"page"},{"location":"formulation_library/Load/#PowerSimulations.StaticPowerLoad","page":"Load","title":"PowerSimulations.StaticPowerLoad","text":"Formulation type to add a time series parameter for non-dispatchable ElectricLoad withdrawals to power balance constraints\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Variables:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"No variables are created","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Time Series Parameters:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Uses the max_active_power timeseries parameter to determine the demand value at each time-step","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"using PowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombos = PowerSimulations.get_default_time_series_names(ElectricLoad, StaticPowerLoad)\ncombo_table = DataFrame(\n \"Parameter\" => map(x -> \"[`$x`](@ref)\", collect(keys(combos))),\n \"Default Time Series Name\" => map(x -> \"`$x`\", collect(values(combos))),\n )\nmdtable(combo_table, latex = false)","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Expressions:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Subtracts the parameters listed above from the respective active and reactive power balance expressions created by the selected Network Formulations.","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Constraints:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"No constraints are created","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"","category":"page"},{"location":"formulation_library/Load/#PowerLoadInterruption","page":"Load","title":"PowerLoadInterruption","text":"","category":"section"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"PowerLoadInterruption","category":"page"},{"location":"formulation_library/Load/#PowerSimulations.PowerLoadInterruption","page":"Load","title":"PowerSimulations.PowerLoadInterruption","text":"Formulation type to enable (binary) load interruptions\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Variables:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"ActivePowerVariable:\nBounds: [0.0, ]\nDefault initial value: 0.0\nSymbol: p^textld\nReactivePowerVariable:\nBounds: [0.0, ]\nDefault initial value: 0.0\nSymbol: q^textld\nOnVariable:\nBounds: 01\nDefault initial value: 1\nSymbol: u^textld","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Static Parameters:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"P^textldmax = PowerSystems.get_max_active_power(device)\nQ^textldmax = PowerSystems.get_max_reactive_power(device)","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Time Series Parameters:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"using PowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombos = PowerSimulations.get_default_time_series_names(ElectricLoad, PowerLoadInterruption)\ncombo_table = DataFrame(\n \"Parameter\" => map(x -> \"[`$x`](@ref)\", collect(keys(combos))),\n \"Default Time Series Name\" => map(x -> \"`$x`\", collect(values(combos))),\n )\nmdtable(combo_table, latex = false)","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Objective:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Creates an objective function term based on the FunctionData Options where the quantity term is defined as p^textld.","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Expressions:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Subtractp^textld and q^textld terms and to the respective active and reactive power balance expressions created by the selected Network Formulations","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Constraints:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"beginaligned\n p_t^textld le u_t^textld cdot textActivePowerTimeSeriesParameter_t quad forall t in 1dots T \n q_t^textre = textpf cdot p_t^textre quad forall t in 1dots T\nendaligned","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"on which textpf = sin(arctan(Q^textldmaxP^textldmax)).","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"","category":"page"},{"location":"formulation_library/Load/#PowerLoadDispatch","page":"Load","title":"PowerLoadDispatch","text":"","category":"section"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"PowerLoadDispatch","category":"page"},{"location":"formulation_library/Load/#PowerSimulations.PowerLoadDispatch","page":"Load","title":"PowerSimulations.PowerLoadDispatch","text":"Formulation type to enable (continuous) load interruption dispatch\n\n\n\n\n\n","category":"type"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Variables:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"ActivePowerVariable:\nBounds: [0.0, ]\nDefault initial value: PowerSystems.get_active_power(device)\nSymbol: p^textld\nReactivePowerVariable:\nBounds: [0.0, ]\nDefault initial value: PowerSystems.get_reactive_power(device)\nSymbol: q^textld","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Static Parameters:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"P^textldmax = PowerSystems.get_max_active_power(device)\nQ^textldmax = PowerSystems.get_max_reactive_power(device)","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Time Series Parameters:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"using PowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombos = PowerSimulations.get_default_time_series_names(ElectricLoad, PowerLoadDispatch)\ncombo_table = DataFrame(\n \"Parameter\" => map(x -> \"[`$x`](@ref)\", collect(keys(combos))),\n \"Default Time Series Name\" => map(x -> \"`$x`\", collect(values(combos))),\n )\nmdtable(combo_table, latex = false)","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Objective:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Creates an objective function term based on the FunctionData Options where the quantity term is defined as p^textld.","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Expressions:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Subtractp^textld and q^textld terms and to the respective active and reactive power balance expressions created by the selected Network Formulations","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Constraints:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"beginaligned\n p_t^textld le textActivePowerTimeSeriesParameter_t quad forall t in 1dots T\n q_t^textld = textpf cdot p_t^textld quad forall t in 1dots T\nendaligned","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"on which textpf = sin(arctan(Q^textldmaxP^textldmax)).","category":"page"},{"location":"formulation_library/Load/#Valid-configurations","page":"Load","title":"Valid configurations","text":"","category":"section"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"Valid DeviceModels for subtypes of ElectricLoad include the following:","category":"page"},{"location":"formulation_library/Load/","page":"Load","title":"Load","text":"using PowerSimulations\nusing PowerSystems\nusing DataFrames\nusing Latexify\ncombos = PowerSimulations.generate_device_formulation_combinations()\nfilter!(x -> x[\"device_type\"] <: ElectricLoad, combos)\ncombo_table = DataFrame(\n \"Valid DeviceModel\" => [\"`DeviceModel($(c[\"device_type\"]), $(c[\"formulation\"]))`\" for c in combos],\n \"Device Type\" => [\"[$(c[\"device_type\"])](https://nrel-Sienna.github.io/PowerSystems.jl/stable/model_library/generated_$(c[\"device_type\"])/)\" for c in combos],\n \"Formulation\" => [\"[$(c[\"formulation\"])](@ref)\" for c in combos],\n )\nmdtable(combo_table, latex = false)","category":"page"},{"location":"code_base_developer_guide/extending_powersimulations/#Extending-Source-Code-Functionalities","page":"Extending Source Code Functionalities","title":"Extending Source Code Functionalities","text":"","category":"section"},{"location":"code_base_developer_guide/extending_powersimulations/#Enable-other-recorder-events","page":"Extending Source Code Functionalities","title":"Enable other recorder events","text":"","category":"section"},{"location":"code_base_developer_guide/extending_powersimulations/","page":"Extending Source Code Functionalities","title":"Extending Source Code Functionalities","text":"Other types of recorder events can be enabled with a possible performance impact. To do this pass in the specific recorder names to be enabled when you call build.","category":"page"},{"location":"code_base_developer_guide/extending_powersimulations/","page":"Extending Source Code Functionalities","title":"Extending Source Code Functionalities","text":"sim = Simulation(...)\nrecorders = [:execution]\nbuild!(sim; recorders = recorders)\nexecute!(sim)","category":"page"},{"location":"code_base_developer_guide/extending_powersimulations/","page":"Extending Source Code Functionalities","title":"Extending Source Code Functionalities","text":"Now we can examine InitialConditionUpdateEvents for specific steps and stages.","category":"page"},{"location":"code_base_developer_guide/extending_powersimulations/","page":"Extending Source Code Functionalities","title":"Extending Source Code Functionalities","text":"show_simulation_events(\n PSI.InitialConditionUpdateEvent,\n \"./output/aggregation/1\",\n x -> x.initial_condition_type == \"DeviceStatus\";\n step = 2,\n stage = 1\n)\n┌─────────────────────────────┬─────────────────────┬────────────────────────┬─────────────────┬─────────────┬─────┬──────────────┐\n│ name │ simulation_time │ initial_condition_type │ device_type │ device_name │ val │ stage_number │\n├─────────────────────────────┼─────────────────────┼────────────────────────┼─────────────────┼─────────────┼─────┼──────────────┤\n│ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │ DeviceStatus │ ThermalStandard │ Solitude │ 0.0 │ 1 │\n│ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │ DeviceStatus │ ThermalStandard │ Park City │ 1.0 │ 1 │\n│ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │ DeviceStatus │ ThermalStandard │ Alta │ 1.0 │ 1 │\n│ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │ DeviceStatus │ ThermalStandard │ Brighton │ 1.0 │ 1 │\n│ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │ DeviceStatus │ ThermalStandard │ Sundance │ 0.0 │ 1 │\n└─────────────────────────────┴─────────────────────┴────────────────────────┴─────────────────┴─────────────┴─────┴──────────────┘","category":"page"},{"location":"code_base_developer_guide/extending_powersimulations/#Show-the-wall-time-with-your-events","page":"Extending Source Code Functionalities","title":"Show the wall time with your events","text":"","category":"section"},{"location":"code_base_developer_guide/extending_powersimulations/","page":"Extending Source Code Functionalities","title":"Extending Source Code Functionalities","text":"Sometimes you might want to see how the events line up with the wall time.","category":"page"},{"location":"code_base_developer_guide/extending_powersimulations/","page":"Extending Source Code Functionalities","title":"Extending Source Code Functionalities","text":"show_simulation_events(\n PSI.InitialConditionUpdateEvent,\n \"./output/aggregation/1\",\n x -> x.initial_condition_type == \"DeviceStatus\";\n step = 2,\n stage = 1,\n wall_time = true\n)\n┌─────────────────────────┬─────────────────────────────┬─────────────────────┬────────────────────────┬─────────────────┬─────────────┬─────┬──────────────┐\n│ timestamp │ name │ simulation_time │ initial_condition_type │ device_type │ device_name │ val │ stage_number │\n├─────────────────────────┼─────────────────────────────┼─────────────────────┼────────────────────────┼─────────────────┼─────────────┼─────┼──────────────┤\n│ 2020-04-07T15:08:32.711 │ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │ DeviceStatus │ ThermalStandard │ Solitude │ 0.0 │ 1 │\n│ 2020-04-07T15:08:32.711 │ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │ DeviceStatus │ ThermalStandard │ Park City │ 1.0 │ 1 │\n│ 2020-04-07T15:08:32.711 │ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │ DeviceStatus │ ThermalStandard │ Alta │ 1.0 │ 1 │\n│ 2020-04-07T15:08:32.711 │ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │ DeviceStatus │ ThermalStandard │ Brighton │ 1.0 │ 1 │\n│ 2020-04-07T15:08:32.711 │ InitialConditionUpdateEvent │ 2024-01-02T00:00:00 │ DeviceStatus │ ThermalStandard │ Sundance │ 0.0 │ 1 │\n└─────────────────────────┴─────────────────────────────┴─────────────────────┴────────────────────────┴─────────────────┴─────────────┴─────┴──────────────┘","category":"page"}] +} diff --git a/v0.28.3/siteinfo.js b/v0.28.3/siteinfo.js new file mode 100644 index 0000000000..4e3d69747d --- /dev/null +++ b/v0.28.3/siteinfo.js @@ -0,0 +1 @@ +var DOCUMENTER_CURRENT_VERSION = "v0.28.3"; diff --git a/v0.28.3/tutorials/adding_new_device_formulation/index.html b/v0.28.3/tutorials/adding_new_device_formulation/index.html new file mode 100644 index 0000000000..89cda5a9b5 --- /dev/null +++ b/v0.28.3/tutorials/adding_new_device_formulation/index.html @@ -0,0 +1,2 @@ + +Adding Device Formulations · PowerSimulations.jl diff --git a/v0.28.3/tutorials/adding_new_problem_model/index.html b/v0.28.3/tutorials/adding_new_problem_model/index.html new file mode 100644 index 0000000000..2c56d5e4f8 --- /dev/null +++ b/v0.28.3/tutorials/adding_new_problem_model/index.html @@ -0,0 +1,76 @@ + +Adding an Operations Problem Model · PowerSimulations.jl

    Adding an Operations Problem Model

    This tutorial will show how to create a custom decision problem model. These cases are the ones where the user want to solve a fully specified problem. Some examples of custom decision models include:

    • Solving a custom Security Constrained Unit Commitment Problem
    • Solving a market agent utility maximization Problem. See examples of this functionality in HybridSystemsSimulations.jl

    The tutorial follows the usual steps for operational model building. First, build the decision model in isolation and second, integrate it into a simulation. In most cases there will be more than one way of achieving the same objective when it comes to implementing the model. This guide shows a general set of steps and requirements but it is by no means an exhaustive and detailed guide on developing custom decision models.

    Warning

    All the code in this tutorial is considered "pseudo-code". Copy-paste will likely not work out of the box. You need to develop the internals of the functions correctly for the examples below to work.

    General Rules

    1. As a general rule you need to understand Julia's terminology such as multiple dispatch, parametric structs and method overloading, among others. Developing custom models for an operational simulation is a highly technical task and requires skilled development. This tutorial also requires good understanding of PowerSystems.jl data structures and features which are covered in the tutorials section of PowerSystems.jl documentation.

    Finally, developing a custom model decision model that will employ an optimization model under the hood requires understanding JuMP.jl.

    1. Need to employ anonymous constraints and variables in JuMP

    and register the constraints, variables and other optimization objects into PowerSimulations.jl's optimization container. Otherwise the features to use your problem in the simulation like the coordination with other problems and post processing won't work. More on this in the section How to develop your build_model! function below.

    1. Implement the required methods for your custom decision models. In some cases it will be possible to re-use some of the other methods that exist in PowerSimulations to make life easier for variable addition and constraint creation but this is not required.

    Decision Problem

    Step 1: Define a Custom Decision Problem

    Define a decision problem struct as a subtype of PowerSimulations.DecisionProblem. This requirement will enable a lot of the underlying functionality that relies on multiple dispatch. DecisionProblems are used to parameterize the behavior of DecisionModel objects which are just containers for the parameters, references and the optimization problem.

    It is possible to define a Custom Decision Problem that gives the user full control over the build, solve and execution process since it imposes less requirements on the developer. However, with less requirements there are also less checks and validations performed inside of PowerSimulations which might lead to unexpected errors

    struct MyCustomDecisionProblem <: PSI.DecisionProblem end

    Alternatively, it is possible to define a Custom Decision Problem subtyping from DefaultDecisionProblem which imposes more requirements and structure onto the developer but employs more checks and validations in the process. Be aware that this route will decrease the flexibility of what can be done inside the custom model.

    struct MyCustomDecisionProblem <: PSI.DefaultDecisionProblem end

    Once the problem type is defined, initialize the decision model container with your custom decision problem passing the solver and some of the settings you need for the solution of the problem. For custom problems some of the settings need manual implementation by the developer. Settings availability is also dependent on wether you choose to subtype from PSI.DecisionProblem or PSI.DefaultDecisionProblem

    my_model = DecisionModel{MyCustomDecisionProblem}(
    +    sys;
    +    name = "MyModel",
    +    optimizer = optimizer_with_attributes(HiGHS.Optimizer),
    +     optimizer_solve_log_print = true,
    +)

    Mandatory Method Implementations

    1. build_model!: This method build the JuMP optimization model.

    Optional Method Overloads

    These methods can be defined optionally for your problem. By default for problems subtyped from DecisionProblem these checks are not executed. If the problems are subtyped from DefaultDecisionProblem these checks are always conducted with PowerSimulations defaults and require compliance with those defaults to pass. In any case, these can be overloaded when necessary depending on the problem requirements.

    1. validate_template
    2. validate_time_series!
    3. reset!
    4. solve_impl!

    How to develop your build_model! function

    Registering a variable in the model

    To register a variable in the model, the developer must first allocate the container into the optimization container and then populate it. For example, it require start the build function as follows:

    Info

    We recommend calling import PowerSimulations and defining the constant CONST PSI = PowerSimulations to make it easier to read the code and determine which package is responsible for defining the functions.

        function PSI.build_model!(model::PSI.DecisionModel{MyCustomDecisionProblem})
    +        container = PSI.get_optimization_container(model)
    +        time_steps = 1:24
    +        PSI.set_time_steps!(container, time_steps)
    +        system = PSI.get_system(model)
    +
    +        thermal_gens = PSY.get_components(PSY.ThermalStandard, system)
    +        thermal_gens_names = PSY.get_name.(thermal_gens)
    +
    +        # Create the container for the variable
    +        variable = PSI.add_variable_container!(
    +            container,
    +            PSI.ActivePowerVariable(), # <- This variable is defined in PowerSimulations but the user can define their own
    +            PSY.ThermalGeneration, # <- Device type for the variable. Can be from PSY or custom defined
    +            thermal_gens_names, # <- First container dimension
    +            time_steps, # <- Second container dimension
    +        )
    +
    +        # Iterate over the devices and time to store the JuMP variables into the container.
    +        for t in time_steps, d in thermal_gens_names
    +            name = PSY.get_name(d)
    +            variable[name, t] = JuMP.@variable(get_jump_model(container))
    +            # It is possible to use PSY getter functions to retrieve data from the generators
    +            JuMP.set_upper_bound(variable[name, t], UB_DATA) # <- Optional
    +            JuMP.set_lower_bound(variable[name, t], LB_DATA) # <- Optional
    +        end
    +
    +        # Add More Variables.....
    +
    +        return
    +    end

    Registering a constraint in the model

    A similar pattern is used to add constraints to the model, in this example the field meta is used to avoid creating unnecessary duplicate constraint types. For instance to reflect upperbound and lowerbound or upwards and downwards constraints. Meta can take any string value except for the _ character.

        function PSI.build_model!(model::PSI.DecisionModel{MyCustomDecisionProblem})
    +        container = PSI.get_optimization_container(model)
    +        time_steps = 1:24
    +        PSI.set_time_steps!(container, time_steps)
    +        system = PSI.get_system(model)
    +
    +        # VARIABLE ADDITION CODE
    +
    +        # Constraint additions
    +        con_ub = PSI.add_constraints_container!(
    +            container,
    +            PSI.RangeLimitConstraint(), # <- Constraint Type defined by PSI or your own
    +            PSY.ThermalGeneration, # <- Device type for variable. Can be PSY or custom
    +            thermal_gens_names, # <- First container dimension
    +            time_steps; # <- Second container dimension
    +            meta = "ub" # <- meta allows to reuse a constraint definition for similar constraints. It only requires to be a string
    +            )
    +
    +        con_lb = PSI.add_constraints_container!(
    +            container,
    +            PSI.RangeLimitConstraint(),
    +            PSY.ThermalGeneration,
    +            thermal_gens_names, # <- First container dimension
    +            time_steps; # <- Second container dimension
    +            meta = "lb" # <- meta allows to reuse a constraint definition for similar constraints. It only requires to be a string
    +            )
    +
    +        # Retrieve a relevant variable from the container if not defined in
    +        variable = PSI.get_variable(container, PSI.ActivePowerVariable(), PSY.ThermalGeneration)
    +        for device in devices, t in time_steps
    +            ci_name = PSY.get_name(device)
    +            limits = get_min_max_limits(device) # depends on constraint type and formulation type
    +            con_ub[ci_name, t] =
    +                JuMP.@constraint(get_jump_model(container), variable[ci_name, t] >= limits.min)
    +            con_lb[ci_name, t] =
    +                JuMP.@constraint(get_jump_model(container), variable[ci_name, t] >= limits.min)
    +        end
    +
    +        return
    +    end
    diff --git a/v0.28.3/tutorials/basics_of_developing_models/index.html b/v0.28.3/tutorials/basics_of_developing_models/index.html new file mode 100644 index 0000000000..5fee8e3718 --- /dev/null +++ b/v0.28.3/tutorials/basics_of_developing_models/index.html @@ -0,0 +1,2 @@ + +Basics of Developing Operation Models · PowerSimulations.jl diff --git a/v0.28.3/tutorials/decision_problem/index.html b/v0.28.3/tutorials/decision_problem/index.html new file mode 100644 index 0000000000..65dd5b916c --- /dev/null +++ b/v0.28.3/tutorials/decision_problem/index.html @@ -0,0 +1,428 @@ + +Single-step Problem · PowerSimulations.jl

    Operations problems with PowerSimulations.jl

    Originally Contributed by: Clayton Barrows

    Introduction

    PowerSimulations.jl supports the construction and solution of optimal power system scheduling problems (Operations Problems). Operations problems form the fundamental building blocks for sequential simulations. This example shows how to specify and customize a the mathematics that will be applied to the data with an ProblemTemplate, build and execute an DecisionModel, and access the results.

    Load Packages

    using PowerSystems
    +using PowerSimulations
    +using HydroPowerSimulations
    +using PowerSystemCaseBuilder
    +using HiGHS # solver
    +using Dates

    Data

    Note

    PowerSystemCaseBuilder.jl is a helper library that makes it easier to reproduce examples in the documentation and tutorials. Normally you would pass your local files to create the system data instead of calling the function build_system. For more details visit PowerSystemCaseBuilder Documentation

    sys = build_system(PSISystems, "modified_RTS_GMLC_DA_sys")
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    System
    PropertyValue
    Name
    Description
    System Units BaseSYSTEM_BASE
    Base Power100.0
    Base Frequency60.0
    Num Components501
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Static Components
    TypeCount
    ACBus73
    Arc109
    Area3
    FixedAdmittance3
    HydroDispatch1
    Line105
    LoadZone21
    PowerLoad51
    RenewableDispatch29
    RenewableNonDispatch31
    TapTransformer15
    ThermalStandard54
    TwoTerminalHVDCLine1
    VariableReserve{ReserveDown}1
    VariableReserve{ReserveUp}4
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Time Series Summary
    owner_typeowner_categorytime_series_typetime_series_categoryinitial_timestampresolution_mscount
    StringStringStringStringStringInt64Int64
    AreaComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:0036000003
    AreaComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:0036000003
    FixedAdmittanceComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:0036000003
    FixedAdmittanceComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:0036000003
    HydroDispatchComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:0036000002
    HydroDispatchComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:0036000002
    PowerLoadComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:00360000051
    PowerLoadComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:00360000051
    RenewableDispatchComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:00360000029
    RenewableDispatchComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:00360000029
    RenewableNonDispatchComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:00360000031
    RenewableNonDispatchComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:00360000031
    VariableReserveComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:0036000005
    VariableReserveComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:0036000005
    +

    Define a problem specification with an ProblemTemplate

    You can create an empty template with:

    template_uc = ProblemTemplate()
    + + + + + + + + + + + + + + + + + + + +
    Network Model
    Network ModelCopperPlatePowerModel
    Slacksfalse
    PTDFfalse
    DualsNone
    + + + + + + + + + + + + +
    Device Models
    Device TypeFormulationSlacks
    +

    Now, you can add a DeviceModel for each device type to create an assignment between PowerSystems device types and the subtypes of AbstractDeviceFormulation. PowerSimulations has a variety of different AbstractDeviceFormulation subtypes that can be applied to different PowerSystems device types, each dispatching to different methods for populating optimization problem objectives, variables, and constraints. Documentation on the formulation options for various devices can be found in the formulation library docs

    Branch Formulations

    Here is an example of relatively standard branch formulations. Other formulations allow for selective enforcement of transmission limits and greater control on transformer settings.

    set_device_model!(template_uc, Line, StaticBranch)
    +set_device_model!(template_uc, Transformer2W, StaticBranch)
    +set_device_model!(template_uc, TapTransformer, StaticBranch)

    Injection Device Formulations

    Here we define template entries for all devices that inject or withdraw power on the network. For each device type, we can define a distinct AbstractDeviceFormulation. In this case, we're defining a basic unit commitment model for thermal generators, curtailable renewable generators, and fixed dispatch (net-load reduction) formulations for HydroDispatch and RenewableNonDispatch devices.

    set_device_model!(template_uc, ThermalStandard, ThermalStandardUnitCommitment)
    +set_device_model!(template_uc, RenewableDispatch, RenewableFullDispatch)
    +set_device_model!(template_uc, PowerLoad, StaticPowerLoad)
    +set_device_model!(template_uc, HydroDispatch, HydroDispatchRunOfRiver)
    +set_device_model!(template_uc, RenewableNonDispatch, FixedOutput)

    Service Formulations

    We have two VariableReserve types, parameterized by their direction. So, similar to creating DeviceModels, we can create ServiceModels. The primary difference being that DeviceModel objects define how constraints get created, while ServiceModel objects define how constraints get modified.

    set_service_model!(template_uc, VariableReserve{ReserveUp}, RangeReserve)
    +set_service_model!(template_uc, VariableReserve{ReserveDown}, RangeReserve)

    Network Formulations

    Finally, we can define the transmission network specification that we'd like to model. For simplicity, we'll choose a copper plate formulation. But there are dozens of specifications available through an integration with PowerModels.jl. Note that many formulations will require appropriate data and may be computationally intractable

    set_network_model!(template_uc, NetworkModel(CopperPlatePowerModel))

    DecisionModel

    Now that we have a System and an ProblemTemplate, we can put the two together to create an DecisionModel that we solve.

    Optimizer

    It's most convenient to define an optimizer instance upfront and pass it into the DecisionModel constructor. For this example, we can use the free HiGHS solver with a relatively relaxed MIP gap (ratioGap) setting to improve speed.

    solver = optimizer_with_attributes(HiGHS.Optimizer, "mip_rel_gap" => 0.5)
    MathOptInterface.OptimizerWithAttributes(HiGHS.Optimizer, Pair{MathOptInterface.AbstractOptimizerAttribute, Any}[MathOptInterface.RawOptimizerAttribute("mip_rel_gap") => 0.5])

    Build an DecisionModel

    The construction of an DecisionModel essentially applies an ProblemTemplate to System data to create a JuMP model.

    problem = DecisionModel(template_uc, sys; optimizer = solver, horizon = Hour(24))
    +build!(problem, output_dir = mktempdir())
    InfrastructureSystems.Optimization.ModelBuildStatusModule.ModelBuildStatus.BUILT = 0
    Tip

    The principal component of the DecisionModel is the JuMP model. But you can serialize to a file using the following command:

        serialize_optimization_model(problem, save_path)

    Keep in mind that if the setting "storevariablenames" is set to False then the file won't show the model's names.

    Solve an DecisionModel

    solve!(problem)
    InfrastructureSystems.Simulation.RunStatusModule.RunStatus.SUCCESSFULLY_FINALIZED = 0

    Results Inspection

    PowerSimulations collects the DecisionModel results into a OptimizationProblemResults struct:

    res = OptimizationProblemResults(problem)

    Start: 2020-01-01T00:00:00

    +

    End: 2020-01-01T23:00:00

    +

    Resolution: 60 minutes

    + + + + + + + + + + + + + + +
    PowerSimulations Problem Auxiliary variables Results
    TimeDurationOff__ThermalStandard
    TimeDurationOn__ThermalStandard
    HydroEnergyOutput__HydroDispatch
    + + + + + + + + + + + + + + + + + +
    PowerSimulations Problem Expressions Results
    ProductionCostExpression__RenewableDispatch
    ActivePowerBalance__System
    ProductionCostExpression__HydroDispatch
    ProductionCostExpression__ThermalStandard
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PowerSimulations Problem Parameters Results
    ActivePowerTimeSeriesParameter__PowerLoad
    RequirementTimeSeriesParameter__VariableReserve__ReserveUp__Reg_Up
    RequirementTimeSeriesParameter__VariableReserve__ReserveDown__Reg_Down
    ActivePowerTimeSeriesParameter__RenewableDispatch
    RequirementTimeSeriesParameter__VariableReserve__ReserveUp__Spin_Up_R2
    RequirementTimeSeriesParameter__VariableReserve__ReserveUp__Spin_Up_R3
    RequirementTimeSeriesParameter__VariableReserve__ReserveUp__Spin_Up_R1
    ActivePowerTimeSeriesParameter__HydroDispatch
    ActivePowerTimeSeriesParameter__RenewableNonDispatch
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PowerSimulations Problem Variables Results
    ActivePowerReserveVariable__VariableReserve__ReserveUp__Spin_Up_R1
    ActivePowerReserveVariable__VariableReserve__ReserveUp__Spin_Up_R3
    StopVariable__ThermalStandard
    StartVariable__ThermalStandard
    ActivePowerReserveVariable__VariableReserve__ReserveUp__Reg_Up
    ActivePowerVariable__HydroDispatch
    ActivePowerReserveVariable__VariableReserve__ReserveDown__Reg_Down
    ActivePowerReserveVariable__VariableReserve__ReserveUp__Spin_Up_R2
    ActivePowerVariable__ThermalStandard
    ActivePowerVariable__RenewableDispatch
    OnVariable__ThermalStandard
    +

    Optimizer Stats

    The optimizer summary is included

    get_optimizer_stats(res)
    1×21 DataFrame
    Rowdetailed_statsobjective_valuetermination_statusprimal_statusdual_statussolver_solve_timeresult_counthas_valueshas_dualsobjective_boundrelative_gapdual_objective_valuesolve_timebarrier_iterationssimplex_iterationsnode_counttimed_solve_timetimed_calculate_aux_variablestimed_calculate_dual_variablessolve_bytes_allocsec_in_gc
    BoolFloat64Int64Int64Int64Float64Int64BoolBoolMissingMissingMissingFloat64MissingMissingMissingFloat64Float64Float64Float64Float64
    1false2.3571e6110NaN1falsefalsemissingmissingmissing0.630498missingmissingmissing0.7110420.3464970.0004271822.94527e70.0

    Objective Function Value

    get_objective_value(res)
    2.357099085649291e6

    Variable, Parameter, Auxillary Variable, Dual, and Expression Values

    The solution value data frames for variables, parameters, auxillary variables, duals and expressions can be accessed using the read_ methods:

    read_variables(res)
    Dict{String, DataFrames.DataFrame} with 11 entries:
    +  "ActivePowerReserveVaria… => 24×52 DataFrame…
    +  "StopVariable__ThermalSt… => 24×55 DataFrame…
    +  "ActivePowerReserveVaria… => 24×52 DataFrame…
    +  "OnVariable__ThermalStan… => 24×55 DataFrame…
    +  "ActivePowerVariable__Hy… => 24×2 DataFrame…
    +  "ActivePowerReserveVaria… => 24×19 DataFrame…
    +  "StartVariable__ThermalS… => 24×55 DataFrame…
    +  "ActivePowerVariable__Th… => 24×55 DataFrame…
    +  "ActivePowerVariable__Re… => 24×30 DataFrame…
    +  "ActivePowerReserveVaria… => 24×18 DataFrame…
    +  "ActivePowerReserveVaria… => 24×17 DataFrame…

    Or, you can read a single parameter values for parameters that exist in the results.

    list_parameter_names(res)
    +read_parameter(res, "ActivePowerTimeSeriesParameter__RenewableDispatch")
    24×30 DataFrame
    RowDateTime122_WIND_1324_PV_3312_PV_1102_PV_1101_PV_1324_PV_2313_PV_2104_PV_1101_PV_2309_WIND_1310_PV_2113_PV_1317_WIND_1314_PV_1324_PV_1103_PV_1303_WIND_1314_PV_2102_PV_2314_PV_3320_PV_1101_PV_3319_PV_1314_PV_4310_PV_1215_PV_1313_PV_1101_PV_4119_PV_1
    DateTimeFloat64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64
    12020-01-01T00:00:00713.20.00.00.00.00.00.00.00.0142.80.00.0795.10.00.00.0480.80.00.00.00.00.00.00.00.00.00.00.00.0
    22020-01-01T01:00:00712.80.00.00.00.00.00.00.00.0139.10.00.0794.40.00.00.0634.90.00.00.00.00.00.00.00.00.00.00.00.0
    32020-01-01T02:00:00708.40.00.00.00.00.00.00.00.0145.30.00.0773.60.00.00.0487.30.00.00.00.00.00.00.00.00.00.00.00.0
    42020-01-01T03:00:00710.70.00.00.00.00.00.00.00.0144.80.00.0767.30.00.00.0432.70.00.00.00.00.00.00.00.00.00.00.00.0
    52020-01-01T04:00:00701.40.00.00.00.00.00.00.00.0137.10.00.0752.20.00.00.0407.90.00.00.00.00.00.00.00.00.00.00.00.0
    62020-01-01T05:00:00682.50.00.00.00.00.00.00.00.098.60.00.0719.40.00.00.0440.20.00.00.00.00.00.00.00.00.00.00.00.0
    72020-01-01T06:00:00614.70.00.00.00.00.00.00.00.062.20.00.0655.30.00.00.0377.30.00.00.00.00.00.00.00.00.00.00.00.0
    82020-01-01T07:00:00517.736.452.230.629.636.462.229.830.447.338.299.4594.647.444.829.8199.346.630.063.847.830.6179.246.438.2127.662.228.827.2
    92020-01-01T08:00:00426.663.497.436.834.863.496.035.037.048.961.4126.2579.161.265.258.4110.667.036.4100.061.437.4248.067.061.4164.695.635.456.6
    102020-01-01T09:00:00274.271.2118.038.036.471.4117.636.638.230.766.8133.2466.869.068.076.63.669.837.6121.869.838.8273.469.866.8172.2116.835.874.8
    112020-01-01T10:00:0093.072.2132.037.836.472.2130.836.638.027.470.2134.2301.470.270.289.82.472.237.4129.070.438.6277.872.270.4173.2128.437.488.2
    122020-01-01T11:00:006.370.6135.237.035.070.6134.235.437.260.969.8135.2110.767.070.298.056.272.436.6128.667.237.6263.272.469.6170.0133.238.691.6
    132020-01-01T12:00:003.867.4131.036.235.467.4129.635.636.420.467.8133.078.967.268.294.091.570.235.8128.267.437.0267.470.267.6169.0128.837.890.6
    142020-01-01T13:00:001.165.2125.435.235.065.2123.635.435.41.667.2126.6107.967.065.881.4103.067.634.8119.667.035.8258.867.667.0161.8122.835.879.2
    152020-01-01T14:00:000.060.2109.631.031.060.4108.031.431.20.063.2110.222.359.462.659.439.764.230.8107.059.431.6227.864.262.8143.2106.831.459.0
    162020-01-01T15:00:000.042.069.020.219.242.065.620.620.22.645.062.824.642.444.825.487.746.220.065.843.420.6151.646.243.882.262.820.427.8
    172020-01-01T16:00:000.90.00.00.00.00.00.00.00.037.90.00.010.80.00.00.092.30.00.00.00.00.00.00.00.00.00.00.00.0
    182020-01-01T17:00:00276.30.00.00.00.00.00.00.00.046.90.00.0243.20.00.00.089.40.00.00.00.00.00.00.00.00.00.00.00.0
    192020-01-01T18:00:00272.90.00.00.00.00.00.00.00.024.00.00.0375.20.00.00.090.40.00.00.00.00.00.00.00.00.00.00.00.0
    202020-01-01T19:00:00345.60.00.00.00.00.00.00.00.024.00.00.0568.40.00.00.081.10.00.00.00.00.00.00.00.00.00.00.00.0
    212020-01-01T20:00:00411.70.00.00.00.00.00.00.00.027.40.00.0636.10.00.00.0172.90.00.00.00.00.00.00.00.00.00.00.00.0
    222020-01-01T21:00:00376.60.00.00.00.00.00.00.00.06.50.00.0719.20.00.00.0326.90.00.00.00.00.00.00.00.00.00.00.00.0
    232020-01-01T22:00:00561.30.00.00.00.00.00.00.00.01.30.00.0734.90.00.00.0256.70.00.00.00.00.00.00.00.00.00.00.00.0
    242020-01-01T23:00:00568.40.00.00.00.00.00.00.00.00.10.00.0729.10.00.00.0141.10.00.00.00.00.00.00.00.00.00.00.00.0

    Plotting

    Take a look at the plotting capabilities in PowerGraphics.jl

    diff --git a/v0.28.3/tutorials/pcm_simulation/index.html b/v0.28.3/tutorials/pcm_simulation/index.html new file mode 100644 index 0000000000..4d20c864b6 --- /dev/null +++ b/v0.28.3/tutorials/pcm_simulation/index.html @@ -0,0 +1,883 @@ + +Multi-stage Production Cost Simulation · PowerSimulations.jl

    Sequential Simulations with PowerSimulations.jl

    Originally Contributed by: Clayton Barrows

    Introduction

    PowerSimulations.jl supports simulations that consist of sequential optimization problems where results from previous problems inform subsequent problems in a variety of ways. This example demonstrates some of these capabilities to represent electricity market clearing. This example is intended to be an extension of the OperationsProblem tutorial.

    Load Packages

    using PowerSystems
    +using PowerSimulations
    +using HydroPowerSimulations
    +const PSI = PowerSimulations
    +using PowerSystemCaseBuilder
    +using Dates
    +using HiGHS #solver

    Optimizer

    It's most convenient to define an optimizer instance upfront and pass it into the DecisionModel constructor. For this example, we can use the free HiGHS solver with a relatively relaxed MIP gap (ratioGap) setting to improve speed.

    solver = optimizer_with_attributes(HiGHS.Optimizer, "mip_rel_gap" => 0.5)
    MathOptInterface.OptimizerWithAttributes(HiGHS.Optimizer, Pair{MathOptInterface.AbstractOptimizerAttribute, Any}[MathOptInterface.RawOptimizerAttribute("mip_rel_gap") => 0.5])

    Hourly day-ahead system

    First, we'll create a System with hourly data to represent day-ahead forecasted wind, solar, and load profiles:

    sys_DA = build_system(PSISystems, "modified_RTS_GMLC_DA_sys"; skip_serialization = true)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    System
    PropertyValue
    Name
    Description
    System Units BaseSYSTEM_BASE
    Base Power100.0
    Base Frequency60.0
    Num Components501
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Static Components
    TypeCount
    ACBus73
    Arc109
    Area3
    FixedAdmittance3
    HydroDispatch1
    Line105
    LoadZone21
    PowerLoad51
    RenewableDispatch29
    RenewableNonDispatch31
    TapTransformer15
    ThermalStandard54
    TwoTerminalHVDCLine1
    VariableReserve{ReserveDown}1
    VariableReserve{ReserveUp}4
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Time Series Summary
    owner_typeowner_categorytime_series_typetime_series_categoryinitial_timestampresolution_mscount
    StringStringStringStringStringInt64Int64
    AreaComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:0036000003
    AreaComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:0036000003
    FixedAdmittanceComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:0036000003
    FixedAdmittanceComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:0036000003
    HydroDispatchComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:0036000002
    HydroDispatchComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:0036000002
    PowerLoadComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:00360000051
    PowerLoadComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:00360000051
    RenewableDispatchComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:00360000029
    RenewableDispatchComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:00360000029
    RenewableNonDispatchComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:00360000031
    RenewableNonDispatchComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:00360000031
    VariableReserveComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:0036000005
    VariableReserveComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:0036000005
    +

    5-Minute system

    The RTS data also includes 5-minute resolution time series data. So, we can create another System to represent 15 minute ahead forecasted data for a "real-time" market:

    sys_RT = build_system(PSISystems, "modified_RTS_GMLC_RT_sys"; skip_serialization = true)
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    System
    PropertyValue
    Name
    Description
    System Units BaseSYSTEM_BASE
    Base Power100.0
    Base Frequency60.0
    Num Components499
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Static Components
    TypeCount
    ACBus73
    Arc109
    Area1
    FixedAdmittance3
    HydroDispatch1
    Line105
    LoadZone21
    PowerLoad51
    RenewableDispatch29
    RenewableNonDispatch31
    TapTransformer15
    ThermalStandard54
    TwoTerminalHVDCLine1
    VariableReserve{ReserveDown}1
    VariableReserve{ReserveUp}4
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Time Series Summary
    owner_typeowner_categorytime_series_typetime_series_categoryinitial_timestampresolution_mscount
    StringStringStringStringStringInt64Int64
    AreaComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:003000001
    AreaComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:003000001
    FixedAdmittanceComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:003000003
    FixedAdmittanceComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:003000003
    HydroDispatchComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:003000002
    HydroDispatchComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:003000002
    PowerLoadComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:0030000051
    PowerLoadComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:0030000051
    RenewableDispatchComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:0030000029
    RenewableDispatchComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:0030000029
    RenewableNonDispatchComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:0030000031
    RenewableNonDispatchComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:0030000031
    VariableReserveComponentDeterministicSingleTimeSeriesForecast2020-01-01T00:00:003000005
    VariableReserveComponentSingleTimeSeriesStaticTimeSeries2020-01-01T00:00:003000005
    +

    ProblemTemplates define stages

    Sequential simulations in PowerSimulations are created by defining OperationsProblems that represent stages, and how information flows between executions of a stage and between different stages.

    Let's start by defining a two stage simulation that might look like a typical day-Ahead and real-time electricity market clearing process.

    Day-ahead unit commitment stage

    First, we can define a unit commitment template for the day ahead problem. We can use the included UC template, but in this example, we'll replace the ThermalBasicUnitCommitment with the slightly more complex ThermalStandardUnitCommitment for the thermal generators.

    template_uc = template_unit_commitment()
    +set_device_model!(template_uc, ThermalStandard, ThermalStandardUnitCommitment)
    +set_device_model!(template_uc, HydroDispatch, HydroDispatchRunOfRiver)
    ┌ Warning: Overwriting ThermalStandard existing model
    +└ @ PowerSimulations ~/work/PowerSimulations.jl/PowerSimulations.jl/src/core/device_model.jl:116

    Define the reference model for the real-time economic dispatch

    In addition to the manual specification process demonstrated in the OperationsProblem example, PSI also provides pre-specified templates for some standard problems:

    template_ed = template_economic_dispatch(
    +    network = NetworkModel(PTDFPowerModel, use_slacks = true),
    +)
    + + + + + + + + + + + + + + + + + + + +
    Network Model
    Network ModelPTDFPowerModel
    Slackstrue
    PTDFfalse
    DualsNone
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Device Models
    Device TypeFormulationSlacks
    RenewableNonDispatchFixedOutputfalse
    ThermalStandardThermalBasicDispatchfalse
    PowerLoadStaticPowerLoadfalse
    InterruptiblePowerLoadPowerLoadInterruptionfalse
    RenewableDispatchRenewableFullDispatchfalse
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Branch Models
    Branch TypeFormulationSlacks
    LineStaticBranchfalse
    TapTransformerStaticBranchfalse
    Transformer2WStaticBranchfalse
    TwoTerminalHVDCLineHVDCTwoTerminalDispatchfalse
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Service Models
    Service TypeFormulationSlacksAggregated Model
    VariableReserve{ReserveUp}RangeReservefalsetrue
    VariableReserve{ReserveDown}RangeReservefalsetrue
    +

    Define the SimulationModels

    DecisionModels define the problems that are executed in the simulation. The actual problem will change as the stage gets updated to represent different time periods, but the formulations applied to the components is constant within a stage. In this case, we want to define two stages with the ProblemTemplates and the Systems that we've already created.

    models = SimulationModels(
    +    decision_models = [
    +        DecisionModel(template_uc, sys_DA, optimizer = solver, name = "UC"),
    +        DecisionModel(template_ed, sys_RT, optimizer = solver, name = "ED"),
    +    ],
    +)
    + + + + + + + + + + + + + + + + + + + + + + + + +
    Decision Models
    Model NameModel TypeStatusOutput Directory
    UCGenericOpProblemEMPTYnothing
    EDGenericOpProblemEMPTYnothing
    + +No Emulator Model Specified +

    SimulationSequence

    Similar to an ProblemTemplate, the SimulationSequence provides a template of how to execute a sequential set of operations problems.

    Let's review some of the SimulationSequence arguments.

    Chronologies

    In PowerSimulations, chronologies define where information is flowing. There are two types of chronologies.

    • inter-stage chronologies: Define how information flows between stages. e.g. day-ahead solutions are used to inform economic dispatch problems
    • intra-stage chronologies: Define how information flows between multiple executions of a single stage. e.g. the dispatch setpoints of the first period of an economic dispatch problem are constrained by the ramping limits from setpoints in the final period of the previous problem.

    FeedForward

    The definition of exactly what information is passed using the defined chronologies is accomplished with FeedForward. Specifically, FeedForward is used to define what to do with information being passed with an inter-stage chronology. Let's define a FeedForward that affects the semi-continuous range constraints of thermal generators in the economic dispatch problems based on the value of the unit-commitment variables.

    feedforward = Dict(
    +    "ED" => [
    +        SemiContinuousFeedforward(
    +            component_type = ThermalStandard,
    +            source = OnVariable,
    +            affected_values = [ActivePowerVariable],
    +        ),
    +    ],
    +)
    Dict{String, Vector{SemiContinuousFeedforward}} with 1 entry:
    +  "ED" => [SemiContinuousFeedforward(VariableKey{OnVariable, ThermalStandard}("…

    Sequencing

    The stage problem length, look-ahead, and other details surrounding the temporal Sequencing of stages are controlled using the structure of the time series data in the Systems. So, to define a typical day-ahead - real-time sequence:

    • Day ahead problems should represent 48 hours, advancing 24 hours after each execution (24-hour look-ahead)
    • Real time problems should represent 1 hour (12 5-minute periods), advancing 15 min after each execution (15 min look-ahead)

    We can adjust the time series data to reflect this structure in each System:

    • transform_single_time_series!(sys_DA, 48, Hour(1))
    • transform_single_time_series!(sys_RT, 12, Minute(15))

    Now we can put it all together to define a SimulationSequence

    DA_RT_sequence = SimulationSequence(
    +    models = models,
    +    ini_cond_chronology = InterProblemChronology(),
    +    feedforwards = feedforward,
    +)
    + + + + + + + + + + + + +
    Simulation Sequence
    Simulation Step Interval24 hours
    Number of Problems2
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Simulation Problems
    Model NameHorizonIntervalExecutions Per Step
    UC2 days1 day1
    ED1 hour15 minutes96
    + + + + + + + + + + + + + + + +
    Feedforwards
    Model NameFeed Forward Type
    EDSemiContinuousFeedforward
    +

    Simulation

    Now, we can build and execute a simulation using the SimulationSequence and Stages that we've defined.

    sim = Simulation(
    +    name = "rts-test",
    +    steps = 2,
    +    models = models,
    +    sequence = DA_RT_sequence,
    +    simulation_folder = joinpath(".", "rts-store"),
    +)
    + + + + + + + + + + + + + + + + + + + + + + + +
    Simulation
    Simulation Namerts-test
    Build StatusEMPTY
    Run StatusNOT_READY
    Initial TimeUnset Initial Time
    Steps2
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Decision Models
    Model NameModel TypeStatusOutput Directory
    UCGenericOpProblemEMPTYnothing
    EDGenericOpProblemEMPTYnothing
    + +No Emulator Model Specified + + + + + + + + + + + + + +
    Simulation Sequence
    Simulation Step Interval24 hours
    Number of Problems2
    + + + + + + + + + + + + + + + + + + + + + + + + + +
    Simulation Problems
    Model NameHorizonIntervalExecutions Per Step
    UC2 days1 day1
    ED1 hour15 minutes96
    + + + + + + + + + + + + + + + +
    Feedforwards
    Model NameFeed Forward Type
    EDSemiContinuousFeedforward
    +

    Build simulation

    build!(sim)
    InfrastructureSystems.Simulation.SimulationBuildStatusModule.SimulationBuildStatus.BUILT = 0

    Execute simulation

    the following command returns the status of the simulation (0: is proper execution) and stores the results in a set of HDF5 files on disk.

    execute!(sim, enable_progress_bar = false)
    InfrastructureSystems.Simulation.RunStatusModule.RunStatus.FAILED = 2

    Results

    To access the results, we need to load the simulation result metadata and then make requests to the specific data of interest. This allows you to efficiently access the results of interest without overloading resources.

    results = SimulationResults(sim);
    +uc_results = get_decision_problem_results(results, "UC"); # UC stage result metadata
    +ed_results = get_decision_problem_results(results, "ED"); # ED stage result metadata

    We can read all the result variables

    read_variables(uc_results)

    or all the parameters

    read_parameters(uc_results)

    We can just list the variable names contained in uc_results:

    list_variable_names(uc_results)

    and a number of parameters (this pattern also works for aux_variables, expressions, and duals)

    list_parameter_names(uc_results)

    Now we can read the specific results of interest for a specific problem, time window (optional), and set of variables, duals, or parameters (optional)

    Dict([
    +    v => read_variable(uc_results, v) for v in [
    +        "ActivePowerVariable__RenewableDispatch",
    +        "ActivePowerVariable__HydroDispatch",
    +        "StopVariable__ThermalStandard",
    +    ]
    +])

    Or if we want the result of just one variable, parameter, or dual (must be defined in the problem definition), we can use:

    read_parameter(
    +    ed_results,
    +    "ActivePowerTimeSeriesParameter__RenewableNonDispatch",
    +    initial_time = DateTime("2020-01-01T06:00:00"),
    +    count = 5,
    +)
    Info

    note that this returns the results of each execution step in a separate dataframe If you want the realized results (without lookahead periods), you can call read_realized_*:

    read_realized_variables(
    +    uc_results,
    +    ["ActivePowerVariable__ThermalStandard", "ActivePowerVariable__RenewableDispatch"],
    +)
    +rm(path, force = true, recursive = true) #hide

    Plotting

    Take a look at the plotting capabilities in PowerGraphics.jl

    diff --git a/v0.28.3/tutorials/rts-store/rts-test/data_store/check.sha256 b/v0.28.3/tutorials/rts-store/rts-test/data_store/check.sha256 new file mode 100644 index 0000000000..57d93e5d06 --- /dev/null +++ b/v0.28.3/tutorials/rts-store/rts-test/data_store/check.sha256 @@ -0,0 +1 @@ +{"files":[{"hash":"5d0a50c4fd58272759fb5dd63ac6e01e36085a4a6833f7866ecedbc9f27ca4b5","filename":"simulation_store.h5"}]} \ No newline at end of file diff --git a/v0.28.3/tutorials/rts-store/rts-test/data_store/simulation_store.h5 b/v0.28.3/tutorials/rts-store/rts-test/data_store/simulation_store.h5 new file mode 100644 index 0000000000..7ee37ca668 Binary files /dev/null and b/v0.28.3/tutorials/rts-store/rts-test/data_store/simulation_store.h5 differ diff --git a/v0.28.3/tutorials/rts-store/rts-test/logs/simulation.log b/v0.28.3/tutorials/rts-store/rts-test/logs/simulation.log new file mode 100644 index 0000000000..1b28355819 --- /dev/null +++ b/v0.28.3/tutorials/rts-store/rts-test/logs/simulation.log @@ -0,0 +1,80 @@ +┌ Info: 2024-07-24T20:45:29.421 [3374:1]: Initializing Optimization Container For a DecisionModel +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/decision_model.jl:323 +┌ Info: 2024-07-24T20:45:29.422 [3374:1]: Initializing ModelStoreParams +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/decision_model.jl:329 +┌ Info: 2024-07-24T20:45:29.422 [3374:1]: Instantiating Network Model +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/decision_model.jl:338 +┌ Info: 2024-07-24T20:45:29.422 [3374:1]: Validating connectivity with depth first search (network traversal) +└ @ PowerNetworkMatrices /home/runner/.julia/packages/PowerNetworkMatrices/mKnwZ/src/system_utils.jl:12 +┌ Info: 2024-07-24T20:45:29.422 [3374:1]: Make Initial Conditions Model +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:230 +┌ Warning: 2024-07-24T20:45:30.564 [3374:1]: CopperPlatePowerModel models with HVDC ignores inter-area losses +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/devices_models/device_constructors/branch_constructor.jl:753 +┌ Info: 2024-07-24T20:45:30.564 [3374:1]: Solving Initialization Model for UC +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:248 +┌ Info: 2024-07-24T20:45:30.733 [3374:1]: Serialized initial conditions to ./rts-store/rts-test/problems/UC/initial_conditions.bin +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:263 +┌ Warning: 2024-07-24T20:45:32.012 [3374:1]: CopperPlatePowerModel models with HVDC ignores inter-area losses +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/devices_models/device_constructors/branch_constructor.jl:753 +┌ Info: 2024-07-24T20:45:32.116 [3374:1]: UC optimizer set to: HiGHS +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:356 +┌ Info: 2024-07-24T20:45:32.116 [3374:1]: Checking Numerical Bounds +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:359 +┌ Info: 2024-07-24T20:45:32.195 [3374:1]: Variable bounds range is [0.0 8.47] +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:317 +┌ Info: 2024-07-24T20:45:32.244 [3374:1]: Constraint coefficient bounds range is [-0.22 4380.0] +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:327 +┌ Info: 2024-07-24T20:45:32.244 [3374:1]: Constraint right-hand-side bounds [0.06 48.0] +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:336 +┌ Info: 2024-07-24T20:45:32.244 [3374:1]: Initializing Optimization Container For a DecisionModel +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/decision_model.jl:323 +┌ Info: 2024-07-24T20:45:32.302 [3374:1]: Initializing ModelStoreParams +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/decision_model.jl:329 +┌ Info: 2024-07-24T20:45:32.302 [3374:1]: Instantiating Network Model +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/decision_model.jl:338 +┌ Info: 2024-07-24T20:45:35.507 [3374:1]: PTDF Matrix not provided. Calculating using PowerNetworkMatrices.PTDF +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/core/network_model.jl:128 +┌ Info: 2024-07-24T20:45:35.731 [3374:1]: Make Initial Conditions Model +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:230 +┌ Info: 2024-07-24T20:45:35.731 [3374:1]: No initial conditions in the model +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:175 +┌ Info: 2024-07-24T20:45:42.178 [3374:1]: ED optimizer set to: HiGHS +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:356 +┌ Info: 2024-07-24T20:45:42.178 [3374:1]: Checking Numerical Bounds +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:359 +┌ Info: 2024-07-24T20:45:42.283 [3374:1]: Variable bounds range is [0.0 8.47] +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:317 +┌ Info: 2024-07-24T20:45:42.621 [3374:1]: Constraint coefficient bounds range is [-1.0 1.0e6] +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:327 +┌ Info: 2024-07-24T20:45:42.621 [3374:1]: Constraint right-hand-side bounds [1.0 -5.0] +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_interface.jl:336 +┌ Info: 2024-07-24T20:45:43.018 [3374:1]: Reconciling initial conditions across models UC, ED +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/simulation/simulation.jl:275 +┌ Info: 2024-07-24T20:45:49.094 [3374:1]: Serialized simulation name = rts-test +│ directory = ./rts-store/rts-test/simulation_files +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/simulation/simulation.jl:1174 +┌ Info: 2024-07-24T20:45:49.155 [3374:1]: Serialized time series data to ./rts-store/rts-test/problems/UC/system-d4831ec5-1be7-4057-aa3f-e30006d9ba3b_time_series_storage.h5. +└ @ InfrastructureSystems /home/runner/.julia/packages/InfrastructureSystems/QnOPR/src/time_series_storage.jl:89 +┌ Info: 2024-07-24T20:45:49.174 [3374:1]: Serialized System to ./rts-store/rts-test/problems/UC/system-d4831ec5-1be7-4057-aa3f-e30006d9ba3b.json +└ @ PowerSystems /home/runner/.julia/packages/PowerSystems/vi3a3/src/base.jl:403 +┌ Info: 2024-07-24T20:45:49.176 [3374:1]: Serialized System metadata to ./rts-store/rts-test/problems/UC/system-d4831ec5-1be7-4057-aa3f-e30006d9ba3b_metadata.json +└ @ PowerSystems /home/runner/.julia/packages/PowerSystems/vi3a3/src/base.jl:428 +┌ Info: 2024-07-24T20:45:49.197 [3374:1]: Serialized OperationModel to +│ bin_file_name = ./rts-store/rts-test/problems/UC/model.bin +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_serialization.jl:67 +┌ Info: 2024-07-24T20:45:49.312 [3374:1]: Serialized time series data to ./rts-store/rts-test/problems/ED/system-83465dce-52e5-480f-aad4-9ae9026fdea5_time_series_storage.h5. +└ @ InfrastructureSystems /home/runner/.julia/packages/InfrastructureSystems/QnOPR/src/time_series_storage.jl:89 +┌ Info: 2024-07-24T20:45:49.332 [3374:1]: Serialized System to ./rts-store/rts-test/problems/ED/system-83465dce-52e5-480f-aad4-9ae9026fdea5.json +└ @ PowerSystems /home/runner/.julia/packages/PowerSystems/vi3a3/src/base.jl:403 +┌ Info: 2024-07-24T20:45:49.334 [3374:1]: Serialized System metadata to ./rts-store/rts-test/problems/ED/system-83465dce-52e5-480f-aad4-9ae9026fdea5_metadata.json +└ @ PowerSystems /home/runner/.julia/packages/PowerSystems/vi3a3/src/base.jl:428 +┌ Info: 2024-07-24T20:45:49.409 [3374:1]: Serialized OperationModel to +│ bin_file_name = ./rts-store/rts-test/problems/ED/model.bin +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/operation/operation_model_serialization.jl:67 +┌ Info: 2024-07-24T20:45:52.527 [3374:1]: Initialize store cache +│ get_min_flush_size(store.cache) = 1048576 +│ get_max_size(store.cache) = 1073741824 +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/simulation/hdf_simulation_store.jl:249 +┌ Error: 2024-07-24T20:46:06.312 [3374:1]: simulation failed +│ exception = (KeyError("113"), Union{Ptr{Nothing}, Base.InterpreterIP}[Ptr{Nothing} @0x00007f215216a5d0, Ptr{Nothing} @0x00007f215216a653, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f21501dac9c, Ptr{Nothing} @0x00007f21501db039, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f21501b1297, Ptr{Nothing} @0x00007f21501b1489, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f2150131a13, Ptr{Nothing} @0x00007f215013743c, Ptr{Nothing} @0x00007f2150137469, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f2150135c54, Ptr{Nothing} @0x00007f2150136b31, Ptr{Nothing} @0x00007f215013736f, Ptr{Nothing} @0x00007f21501373f2, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f216c3f7475, Ptr{Nothing} @0x00007f215012b065, Ptr{Nothing} @0x00007f215012b5a6, Ptr{Nothing} @0x00007f215012b5e9, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f2182664dd4, Ptr{Nothing} @0x00007f21826648c4, Ptr{Nothing} @0x00007f2182665623, Ptr{Nothing} @0x00007f21826663fd, Base.InterpreterIP in top-level CodeInfo for Main.__atexample__named__pcm at statement 4, Ptr{Nothing} @0x00007f21826822e4, Ptr{Nothing} @0x00007f2182682a99, Ptr{Nothing} @0x00007f2182683eab, Ptr{Nothing} @0x00007f2157b6bab4, Ptr{Nothing} @0x00007f2157b6bd75, Ptr{Nothing} @0x00007f2157b6c632, Ptr{Nothing} @0x00007f2157b6cbf2, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f216c3f7475, Ptr{Nothing} @0x00007f2157b6b150, Ptr{Nothing} @0x00007f2157b6b353, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f2157b6a046, Ptr{Nothing} @0x00007f2157b6a089, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f2157b67dbc, Ptr{Nothing} @0x00007f2157b69e31, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f2182659548, Ptr{Nothing} @0x00007f217cbd060a, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f217cbcf8bb, Ptr{Nothing} @0x00007f217cbcfd3e, Ptr{Nothing} @0x00007f217cbcffc6, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f217cb3d330, Ptr{Nothing} @0x00007f217cb3d4da, Ptr{Nothing} @0x00007f217cb3d96e, Ptr{Nothing} @0x00007f217cb3dad9, Ptr{Nothing} @0x00007f217cb3db15, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f217cb23582, Ptr{Nothing} @0x00007f2182682603, Ptr{Nothing} @0x00007f2182682a99, Ptr{Nothing} @0x00007f2182683eab, Ptr{Nothing} @0x00007f216d636331, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f216c879460, Ptr{Nothing} @0x00007f216ca2e2de, Ptr{Nothing} @0x00007f216ce285ca, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f216cf50e13, Ptr{Nothing} @0x00007f216cb9327d, Ptr{Nothing} @0x00007f216cb933b3, Ptr{Nothing} @0x00007f2182646f8d, Ptr{Nothing} @0x00007f21826b1ec5, Ptr{Nothing} @0x00007f21826b294e, Ptr{Nothing} @0x0000000000401088, Ptr{Nothing} @0x00007f2183429d8f, Ptr{Nothing} @0x00007f2183429e3f, Ptr{Nothing} @0x00000000004010b8]) +└ @ PowerSimulations /home/runner/work/PowerSimulations.jl/PowerSimulations.jl/src/simulation/simulation.jl:1097 diff --git a/v0.28.3/tutorials/rts-store/rts-test/problems/ED/model.bin b/v0.28.3/tutorials/rts-store/rts-test/problems/ED/model.bin new file mode 100644 index 0000000000..70d0b70531 Binary files /dev/null and b/v0.28.3/tutorials/rts-store/rts-test/problems/ED/model.bin differ diff --git a/v0.28.3/tutorials/rts-store/rts-test/problems/ED/optimization_container_metadata.bin b/v0.28.3/tutorials/rts-store/rts-test/problems/ED/optimization_container_metadata.bin new file mode 100644 index 0000000000..dd8632248a Binary files /dev/null and b/v0.28.3/tutorials/rts-store/rts-test/problems/ED/optimization_container_metadata.bin differ diff --git a/v0.28.3/tutorials/rts-store/rts-test/problems/ED/system-83465dce-52e5-480f-aad4-9ae9026fdea5.json b/v0.28.3/tutorials/rts-store/rts-test/problems/ED/system-83465dce-52e5-480f-aad4-9ae9026fdea5.json new file mode 100644 index 0000000000..514e3de169 --- /dev/null +++ b/v0.28.3/tutorials/rts-store/rts-test/problems/ED/system-83465dce-52e5-480f-aad4-9ae9026fdea5.json @@ -0,0 +1 @@ +{"internal":{"uuid":{"value":"83465dce-52e5-480f-aad4-9ae9026fdea5"},"ext":{},"units_info":null},"data":{"time_series_storage_type":"InfrastructureSystems.Hdf5TimeSeriesStorage","masked_components":[],"supplemental_attribute_manager":{"attributes":[],"associations":[]},"internal":{"uuid":{"value":"687c9e7d-91f4-4380-a82b-2249cfaacbf1"},"ext":{},"units_info":null},"components":[{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"B15","reactive_power_flow":0.0,"arc":{"value":"1c8366a9-5586-4c6d-999c-3d563c3ae902"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"5459ea10-9a31-47c6-b651-f6ada05a3ad0"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.03},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"B14","reactive_power_flow":0.0,"arc":{"value":"9869c7e5-be27-40aa-8c05-181c5870e5d2"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"8dfb341d-f106-4ca7-9c1b-ab25379e1479"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.03},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"A17","reactive_power_flow":0.0,"arc":{"value":"4bd6e46a-8f2a-437e-a997-9a3a74b6f40a"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"61a5b1e6-f0ba-41f4-8fe8-f7df09990e68"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"C16","reactive_power_flow":0.0,"arc":{"value":"e6e7b6ae-66b0-413e-b2f1-4de92700785e"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"e099b166-3026-4f6c-a4e0-36a3766e4bdc"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"B17","reactive_power_flow":0.0,"arc":{"value":"83aed557-9baf-4107-841d-ac0570109b6d"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"adccf2d2-a3c8-42f7-bed4-516fa858312d"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"A14","reactive_power_flow":0.0,"arc":{"value":"a515a1f1-80c5-49bb-a053-e5bfe72b53e9"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"1d94fe46-c404-4f31-b57e-cf713c407c76"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.03},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"C15","reactive_power_flow":0.0,"arc":{"value":"56b5c0cc-b503-4cde-8bd2-8c5a286ce8d3"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"747780dc-bafc-45cd-a0e8-7d89361936b2"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.03},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"B7","reactive_power_flow":0.0,"arc":{"value":"f3acd499-1120-4821-96e2-a32bbd217062"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"cdb185f8-cc5e-4862-97ae-30624dfcab3a"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"A7","reactive_power_flow":0.0,"arc":{"value":"99b31f05-ef17-44c9-879f-bb0424f9de1e"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"e214fd4e-5e83-4b3c-9a12-e0aa51648230"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"A16","reactive_power_flow":0.0,"arc":{"value":"28156b0e-24c5-43db-8ef8-1574ae73c701"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"ed256ed9-07a0-4f8b-82ff-3bd8773a2d9a"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"C17","reactive_power_flow":0.0,"arc":{"value":"0605f536-a014-4bb6-8113-d0bf11b4c122"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"d35891c6-2d85-46fc-821f-f9b2969cd9e4"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"A15","reactive_power_flow":0.0,"arc":{"value":"29015e37-d783-4520-8777-8f60ddf5032d"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"2bca95d6-848f-466b-94da-89a9e5d63ab3"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.03},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"B16","reactive_power_flow":0.0,"arc":{"value":"ba062ef1-8f90-4808-a0e5-0915805b6fc4"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"0f138f2e-ad23-4c51-baab-cdc865657c08"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"C7","reactive_power_flow":0.0,"arc":{"value":"203650f1-4c8a-45ae-81c7-01aff5d09594"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"0e62d75d-7a7f-4a43-bd7c-b1b7da31ffda"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"C14","reactive_power_flow":0.0,"arc":{"value":"607959a7-bd13-46f2-b516-3da2d5088dac"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"40313c9b-61d6-4ea8-a7a5-cd7a140bbc4f"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.03},{"requirement":0.42851,"max_participation_factor":1.0,"sustained_time":3600.0,"available":true,"name":"Spin_Up_R2","__metadata__":{"parameters":["ReserveUp"],"construct_with_parameters":true,"module":"PowerSystems","type":"VariableReserve"},"internal":{"uuid":{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},"ext":null,"units_info":null},"time_frame":600.0,"ext":{},"deployed_fraction":0.0,"max_output_fraction":1.0},{"requirement":0.5666599999999999,"max_participation_factor":1.0,"sustained_time":3600.0,"available":true,"name":"Spin_Up_R3","__metadata__":{"parameters":["ReserveUp"],"construct_with_parameters":true,"module":"PowerSystems","type":"VariableReserve"},"internal":{"uuid":{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},"ext":null,"units_info":null},"time_frame":600.0,"ext":{},"deployed_fraction":0.0,"max_output_fraction":1.0},{"requirement":1.26,"max_participation_factor":1.0,"sustained_time":3600.0,"available":true,"name":"Reg_Up","__metadata__":{"parameters":["ReserveUp"],"construct_with_parameters":true,"module":"PowerSystems","type":"VariableReserve"},"internal":{"uuid":{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},"ext":null,"units_info":null},"time_frame":300.0,"ext":{},"deployed_fraction":0.0,"max_output_fraction":1.0},{"requirement":0.40413,"max_participation_factor":1.0,"sustained_time":3600.0,"available":true,"name":"Spin_Up_R1","__metadata__":{"parameters":["ReserveUp"],"construct_with_parameters":true,"module":"PowerSystems","type":"VariableReserve"},"internal":{"uuid":{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},"ext":null,"units_info":null},"time_frame":600.0,"ext":{},"deployed_fraction":0.0,"max_output_fraction":1.0},{"Y":{"real":0.0,"imag":-1.0},"name":"Camus","internal":{"uuid":{"value":"01ad1f42-fe9a-4ae5-8639-61c55ca04f85"},"ext":null,"units_info":null},"services":[],"ext":{},"bus":{"value":"72e004e0-797e-4f5a-ac27-b2e8631f8441"},"dynamic_injector":null,"available":true,"__metadata__":{"module":"PowerSystems","type":"FixedAdmittance"}},{"Y":{"real":0.0,"imag":-1.0},"name":"Bajer","internal":{"uuid":{"value":"64d950a1-bc9d-4524-a7da-255f9f2d4b09"},"ext":null,"units_info":null},"services":[],"ext":{},"bus":{"value":"625ea2fd-5d08-4173-a8fc-f60800ef1533"},"dynamic_injector":null,"available":true,"__metadata__":{"module":"PowerSystems","type":"FixedAdmittance"}},{"Y":{"real":0.0,"imag":-1.0},"name":"Alber","internal":{"uuid":{"value":"3953beb4-b670-40b8-80d8-b9944a80627e"},"ext":null,"units_info":null},"services":[],"ext":{},"bus":{"value":"1fbe0ef1-71c2-4941-b17a-7f7a4ed019bc"},"dynamic_injector":null,"available":true,"__metadata__":{"module":"PowerSystems","type":"FixedAdmittance"}},{"internal":{"uuid":{"value":"fec15af8-ad3d-44ea-8045-3e2285cb15ca"},"ext":null,"units_info":null},"to":{"value":"7dc820fe-4fd9-40d7-a308-cc16f44c259a"},"from":{"value":"367d6df0-b518-4034-8a6c-72492bd2b6bb"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"0c4061be-0dfd-4db7-9794-08eec522f815"},"ext":null,"units_info":null},"to":{"value":"917d920b-6e3f-4fc5-9eeb-daf48c7df2b3"},"from":{"value":"5e67fd81-10ae-4a2e-860a-da7c82a49336"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"ef09397f-4c69-43f9-89d3-1637b5096370"},"ext":null,"units_info":null},"to":{"value":"db09deae-f668-417c-a5b7-689e9c36efc9"},"from":{"value":"1fbe0ef1-71c2-4941-b17a-7f7a4ed019bc"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"7ba7ddb9-72d3-47e0-863f-5ac154b66117"},"ext":null,"units_info":null},"to":{"value":"c207d005-44a7-41a5-bb98-aca4f1f6bee9"},"from":{"value":"7dc820fe-4fd9-40d7-a308-cc16f44c259a"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"a4cb489e-588b-4a60-bc34-aed83e0a8131"},"ext":null,"units_info":null},"to":{"value":"d702b325-6ec5-4597-b462-c1ce5f8c1578"},"from":{"value":"69e48628-2660-454a-9085-48c99d863012"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"9869c7e5-be27-40aa-8c05-181c5870e5d2"},"ext":null,"units_info":null},"to":{"value":"f2d4f823-b85a-4c3f-a257-6bb599027788"},"from":{"value":"6272599c-9e1f-44e6-8376-72121e8ac970"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"05533484-7459-4c82-bbba-3d2ee12589dd"},"ext":null,"units_info":null},"to":{"value":"78076c0b-9a17-4846-96ce-9334df1ab766"},"from":{"value":"b06e629f-f96d-4376-8896-09f2b344fae6"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"94aba903-40da-424f-b1c0-d2fae7628265"},"ext":null,"units_info":null},"to":{"value":"f1fc491a-ec56-44ca-888c-2c7e45381334"},"from":{"value":"f9f77224-993f-49db-b8c2-6513bf9b832a"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"15ed3fa9-44d1-4546-9aae-850d1759ec45"},"ext":null,"units_info":null},"to":{"value":"3a7c6bf7-e76d-4ade-afb4-05f0ff0cdddd"},"from":{"value":"5183e951-7348-4c03-b910-780387f676ab"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"042d82bb-5801-42d5-a470-889aebeef05c"},"ext":null,"units_info":null},"to":{"value":"2313be90-da14-46fe-bbd7-54bd2efdd62f"},"from":{"value":"d212c9d5-49d8-477e-91a2-a81f099d516f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"2f6e01d0-588e-4f22-9600-14a968159846"},"ext":null,"units_info":null},"to":{"value":"f36ee200-bdb0-4365-8742-9708bb98dc33"},"from":{"value":"89862d38-29d4-4d40-9c08-3b1254aae7fd"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"70f6ed82-06bd-45e3-82ab-8db89f8e6997"},"ext":null,"units_info":null},"to":{"value":"cc3f8b48-f40e-41de-b5df-9c0542019d0f"},"from":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"90f82c3e-f201-493a-a2e5-36c3ea39752b"},"ext":null,"units_info":null},"to":{"value":"765835a0-9371-4b70-835f-584516769222"},"from":{"value":"5e67fd81-10ae-4a2e-860a-da7c82a49336"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"b77d2e8c-3fe9-4f09-aff1-1c5b99baeef9"},"ext":null,"units_info":null},"to":{"value":"1fbe0ef1-71c2-4941-b17a-7f7a4ed019bc"},"from":{"value":"3a7c6bf7-e76d-4ade-afb4-05f0ff0cdddd"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"785c39ec-c4a6-4cab-b070-43505ee74d45"},"ext":null,"units_info":null},"to":{"value":"765835a0-9371-4b70-835f-584516769222"},"from":{"value":"6f3bc9ff-1c1d-4b15-ae3a-1347c1feb75b"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"94a79643-f10f-4308-9ccb-512f554df31b"},"ext":null,"units_info":null},"to":{"value":"f9f77224-993f-49db-b8c2-6513bf9b832a"},"from":{"value":"4bdd3592-4aae-4f6e-9d06-2f8a914f8291"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"0dce208b-cafb-4a3f-9745-84d01707bb9e"},"ext":null,"units_info":null},"to":{"value":"2d433ab6-bf62-4ea7-b9ab-5e15d02c52e3"},"from":{"value":"917d920b-6e3f-4fc5-9eeb-daf48c7df2b3"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"c3f8da4f-0667-4fbb-b09c-590fa4977b78"},"ext":null,"units_info":null},"to":{"value":"ab9edaa7-4310-46a2-8ce0-de9f84c54995"},"from":{"value":"af6f1f63-b89c-4c78-8915-897f054405c3"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"22b695d3-73f9-4bc8-b160-3fd9764ee87f"},"ext":null,"units_info":null},"to":{"value":"dc90fcb0-7507-41f5-a612-7868ad4fc22e"},"from":{"value":"78076c0b-9a17-4846-96ce-9334df1ab766"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"b5bc36ad-acd1-40a7-8a14-951ddf614a19"},"ext":null,"units_info":null},"to":{"value":"c5c6a506-2509-4f9b-9049-f470b31f021a"},"from":{"value":"08a7f936-3c86-4d40-9344-674aad6a17c8"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"d2d1be77-31fb-4844-a07d-b5f0f8c0302e"},"ext":null,"units_info":null},"to":{"value":"e29b3c74-33b5-4eec-8836-85b35666c0ff"},"from":{"value":"c207d005-44a7-41a5-bb98-aca4f1f6bee9"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"2e22b71b-7f0b-4665-a9e0-f948450ea38d"},"ext":null,"units_info":null},"to":{"value":"6fed2a6f-d989-4b2e-b5dd-ca2b75bb058d"},"from":{"value":"fd4c192d-52b1-4ee2-9f83-99e99043cd6b"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"8d8c7458-95c9-4edf-ab3c-0f5e61e85720"},"ext":null,"units_info":null},"to":{"value":"91784f04-9d48-4c0c-bc4b-76f1f9a1202c"},"from":{"value":"5183e951-7348-4c03-b910-780387f676ab"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"7d14a652-3827-43e6-8717-7b77f306133f"},"ext":null,"units_info":null},"to":{"value":"917d920b-6e3f-4fc5-9eeb-daf48c7df2b3"},"from":{"value":"765835a0-9371-4b70-835f-584516769222"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"9fb8938b-37cf-4b5f-8535-f77e51c9277b"},"ext":null,"units_info":null},"to":{"value":"4eb1ca69-9e90-4788-bc87-d254e148d3a2"},"from":{"value":"2a086534-9378-412f-957e-b88d78cd804d"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"3fa6661b-02bf-4d6b-9bf9-89b5383c29d5"},"ext":null,"units_info":null},"to":{"value":"f36ee200-bdb0-4365-8742-9708bb98dc33"},"from":{"value":"91784f04-9d48-4c0c-bc4b-76f1f9a1202c"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"ba062ef1-8f90-4808-a0e5-0915805b6fc4"},"ext":null,"units_info":null},"to":{"value":"f2d4f823-b85a-4c3f-a257-6bb599027788"},"from":{"value":"4eb1ca69-9e90-4788-bc87-d254e148d3a2"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"6c7e2c31-cf59-4cd4-91df-7f4c9be2e3bd"},"ext":null,"units_info":null},"to":{"value":"2a086534-9378-412f-957e-b88d78cd804d"},"from":{"value":"6dbcc15e-3d14-4dcc-9c96-e1f0691d1168"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"143c52b0-64c4-4701-b4b6-1ee139b094b7"},"ext":null,"units_info":null},"to":{"value":"4bdd3592-4aae-4f6e-9d06-2f8a914f8291"},"from":{"value":"60325cf0-2d69-4f44-ac2a-da4256fcb6cb"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"bff3fb35-5932-4a78-a966-d23d83085207"},"ext":null,"units_info":null},"to":{"value":"c5c6a506-2509-4f9b-9049-f470b31f021a"},"from":{"value":"6c15bee4-23b2-4a02-8320-c17d12ea30ea"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"60c83c1b-462b-4b67-a4c6-0217aa86b389"},"ext":null,"units_info":null},"to":{"value":"08a7f936-3c86-4d40-9344-674aad6a17c8"},"from":{"value":"5febc718-ae81-4978-aa2c-b2dce9b8d1e5"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"f5fa5960-1ff6-4c65-b8b9-868eb7e82247"},"ext":null,"units_info":null},"to":{"value":"7e1d78ef-4352-4fab-9a0c-8119d5844781"},"from":{"value":"69e48628-2660-454a-9085-48c99d863012"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"d00dc0cc-727e-4477-8c3f-6306904e74d5"},"ext":null,"units_info":null},"to":{"value":"3c3c7143-9a74-49a1-b26d-436bc9ec1b67"},"from":{"value":"cc3f8b48-f40e-41de-b5df-9c0542019d0f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"9204a5e0-e429-4a35-9851-fbc1b92dd7d3"},"ext":null,"units_info":null},"to":{"value":"5febc718-ae81-4978-aa2c-b2dce9b8d1e5"},"from":{"value":"4bdd3592-4aae-4f6e-9d06-2f8a914f8291"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"b8a4af46-03a1-436f-86bb-85aac1544722"},"ext":null,"units_info":null},"to":{"value":"72e004e0-797e-4f5a-ac27-b2e8631f8441"},"from":{"value":"e69f0ad5-e088-4fac-bb71-4f86c244f8f6"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"b92b6f49-181d-4cea-930e-4c09562cd806"},"ext":null,"units_info":null},"to":{"value":"6c15bee4-23b2-4a02-8320-c17d12ea30ea"},"from":{"value":"09017d78-0bae-4de6-9552-5939cf43837e"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"d41f1b2b-daeb-4e85-be76-041d876f5270"},"ext":null,"units_info":null},"to":{"value":"db09deae-f668-417c-a5b7-689e9c36efc9"},"from":{"value":"ce6baba1-0807-45fb-8cb7-9255686dc6b2"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"63a27f4a-f7f7-482d-8fd7-ed06df53b297"},"ext":null,"units_info":null},"to":{"value":"6fed2a6f-d989-4b2e-b5dd-ca2b75bb058d"},"from":{"value":"acebae3e-4686-4d49-80a4-f723fdcf422f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"8df9d165-303c-4865-a792-272e50d244c2"},"ext":null,"units_info":null},"to":{"value":"af6f1f63-b89c-4c78-8915-897f054405c3"},"from":{"value":"e17e4a10-16bd-4481-8aa5-1a228a65c33c"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"1c91977b-8884-4604-a3f6-6ad04d7adb28"},"ext":null,"units_info":null},"to":{"value":"1fd0fcca-560c-432c-8f56-c0e78e190a93"},"from":{"value":"f25908f6-24b3-48e8-aba9-cbb605169c48"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"1415927f-4d06-4315-afcc-8bc6f9f51e97"},"ext":null,"units_info":null},"to":{"value":"221d393d-2d2e-44b4-b82c-68a1d6d8b58b"},"from":{"value":"6f3bc9ff-1c1d-4b15-ae3a-1347c1feb75b"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"b215820e-c9e3-42e4-b385-89b0d90597eb"},"ext":null,"units_info":null},"to":{"value":"acebae3e-4686-4d49-80a4-f723fdcf422f"},"from":{"value":"a8cc8bce-df7e-4a2e-ab6d-978c8ead4faa"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"432960a2-3c8a-4a5b-98e3-6b19d60cfbc2"},"ext":null,"units_info":null},"to":{"value":"6272599c-9e1f-44e6-8376-72121e8ac970"},"from":{"value":"33b01702-9b2b-496d-a084-4e7d0285d1c1"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"16312a4e-1806-4bbc-9684-c559ae2ada89"},"ext":null,"units_info":null},"to":{"value":"7dc820fe-4fd9-40d7-a308-cc16f44c259a"},"from":{"value":"cdbd78c0-e3d9-4055-921b-49d9fa8af4f0"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"a9f1f485-d758-4ec0-980f-93a707ee343d"},"ext":null,"units_info":null},"to":{"value":"bbf94e94-d8d9-4c15-8696-edcb88dc80e0"},"from":{"value":"958448d3-d1ac-4d89-a7f8-04053fd8dbf7"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"203650f1-4c8a-45ae-81c7-01aff5d09594"},"ext":null,"units_info":null},"to":{"value":"d1f7a145-8763-4cdf-b499-03b2e6c042ee"},"from":{"value":"2313be90-da14-46fe-bbd7-54bd2efdd62f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"5096832c-c4b6-4624-81b4-645dbe3b8d96"},"ext":null,"units_info":null},"to":{"value":"732dab8b-88e2-4c49-ad28-167a57826879"},"from":{"value":"78076c0b-9a17-4846-96ce-9334df1ab766"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"29015e37-d783-4520-8777-8f60ddf5032d"},"ext":null,"units_info":null},"to":{"value":"a8cc8bce-df7e-4a2e-ab6d-978c8ead4faa"},"from":{"value":"f36ee200-bdb0-4365-8742-9708bb98dc33"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"28156b0e-24c5-43db-8ef8-1574ae73c701"},"ext":null,"units_info":null},"to":{"value":"303d3153-2035-4054-85e5-97f3c5334cae"},"from":{"value":"db09deae-f668-417c-a5b7-689e9c36efc9"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"a069ea71-4562-4d45-8ec2-3f75546e5019"},"ext":null,"units_info":null},"to":{"value":"af6f1f63-b89c-4c78-8915-897f054405c3"},"from":{"value":"306ed745-ef31-4c2a-b8c3-191cfe87042b"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"573876a5-c1f8-4d0c-bcb7-a42497d770a2"},"ext":null,"units_info":null},"to":{"value":"c5c6a506-2509-4f9b-9049-f470b31f021a"},"from":{"value":"09017d78-0bae-4de6-9552-5939cf43837e"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"3ff8586c-1d60-4b65-96db-b0f7103ee261"},"ext":null,"units_info":null},"to":{"value":"d6c82dd3-53e3-4ae4-a6db-4718bb150adc"},"from":{"value":"5febc718-ae81-4978-aa2c-b2dce9b8d1e5"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"413516c0-cb6e-4bb8-901c-43291791824d"},"ext":null,"units_info":null},"to":{"value":"dc90fcb0-7507-41f5-a612-7868ad4fc22e"},"from":{"value":"72e004e0-797e-4f5a-ac27-b2e8631f8441"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"635afab5-f185-4430-9992-74e4e4d6f66a"},"ext":null,"units_info":null},"to":{"value":"d0e5efa9-6aba-441c-859d-ab21f80bd931"},"from":{"value":"367d6df0-b518-4034-8a6c-72492bd2b6bb"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"16174f70-79d8-4ca1-a620-25c48b1995ff"},"ext":null,"units_info":null},"to":{"value":"c207d005-44a7-41a5-bb98-aca4f1f6bee9"},"from":{"value":"6fed2a6f-d989-4b2e-b5dd-ca2b75bb058d"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"5b411f3c-5e11-4561-af28-cebb88c6c00b"},"ext":null,"units_info":null},"to":{"value":"91615274-0935-4bd1-983a-9a0397a25d92"},"from":{"value":"e69f0ad5-e088-4fac-bb71-4f86c244f8f6"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"da9c39b9-2d79-44a9-bda8-16a3c055dfeb"},"ext":null,"units_info":null},"to":{"value":"56492fc8-f2bc-47d2-a91d-8ab5cf8ed0bf"},"from":{"value":"c9e969ee-0360-47ac-bb9e-1fa7c9686021"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"fd8ff567-294b-42ad-b693-66a418f3be26"},"ext":null,"units_info":null},"to":{"value":"3c3c7143-9a74-49a1-b26d-436bc9ec1b67"},"from":{"value":"ab9edaa7-4310-46a2-8ce0-de9f84c54995"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"dedca241-3cbe-4a51-abff-f76f189d6395"},"ext":null,"units_info":null},"to":{"value":"ce6baba1-0807-45fb-8cb7-9255686dc6b2"},"from":{"value":"5183e951-7348-4c03-b910-780387f676ab"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"0605f536-a014-4bb6-8113-d0bf11b4c122"},"ext":null,"units_info":null},"to":{"value":"5e67fd81-10ae-4a2e-860a-da7c82a49336"},"from":{"value":"dc90fcb0-7507-41f5-a612-7868ad4fc22e"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"3e607ec6-7158-4180-a3f4-210109a82df2"},"ext":null,"units_info":null},"to":{"value":"381ba93f-587c-4f1a-b630-80aa09339c47"},"from":{"value":"af6f1f63-b89c-4c78-8915-897f054405c3"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"44126cde-d70d-4cb8-a9b6-5921dfd139bb"},"ext":null,"units_info":null},"to":{"value":"042bf3e4-a488-4274-b72c-217eb47ad92f"},"from":{"value":"60325cf0-2d69-4f44-ac2a-da4256fcb6cb"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"20f0c6e2-ab97-4825-bf1e-fd54e6e17029"},"ext":null,"units_info":null},"to":{"value":"e69f0ad5-e088-4fac-bb71-4f86c244f8f6"},"from":{"value":"d212c9d5-49d8-477e-91a2-a81f099d516f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"56b5c0cc-b503-4cde-8bd2-8c5a286ce8d3"},"ext":null,"units_info":null},"to":{"value":"5e67fd81-10ae-4a2e-860a-da7c82a49336"},"from":{"value":"732dab8b-88e2-4c49-ad28-167a57826879"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"2a6b75af-0075-49ed-8616-5e013931e32e"},"ext":null,"units_info":null},"to":{"value":"d6c82dd3-53e3-4ae4-a6db-4718bb150adc"},"from":{"value":"042bf3e4-a488-4274-b72c-217eb47ad92f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"84147d80-8165-43fc-b6a1-c6fc05c6b30a"},"ext":null,"units_info":null},"to":{"value":"33d5602a-9329-40d6-8ad5-111041585ca4"},"from":{"value":"e17e4a10-16bd-4481-8aa5-1a228a65c33c"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"0ae20894-019c-4072-95e3-911abac3fcbf"},"ext":null,"units_info":null},"to":{"value":"625ea2fd-5d08-4173-a8fc-f60800ef1533"},"from":{"value":"d702b325-6ec5-4597-b462-c1ce5f8c1578"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"99b31f05-ef17-44c9-879f-bb0424f9de1e"},"ext":null,"units_info":null},"to":{"value":"33d5602a-9329-40d6-8ad5-111041585ca4"},"from":{"value":"91784f04-9d48-4c0c-bc4b-76f1f9a1202c"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"a12673c6-cb5e-4c52-ba6f-20aee693ff1e"},"ext":null,"units_info":null},"to":{"value":"c5c6a506-2509-4f9b-9049-f470b31f021a"},"from":{"value":"bbf94e94-d8d9-4c15-8696-edcb88dc80e0"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"cea5a2cb-6d29-4c98-b916-5a247400f6b9"},"ext":null,"units_info":null},"to":{"value":"4eb1ca69-9e90-4788-bc87-d254e148d3a2"},"from":{"value":"3f89de57-ac01-4267-a82a-b069eac1ee24"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"a515a1f1-80c5-49bb-a053-e5bfe72b53e9"},"ext":null,"units_info":null},"to":{"value":"303d3153-2035-4054-85e5-97f3c5334cae"},"from":{"value":"f36ee200-bdb0-4365-8742-9708bb98dc33"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"5a610b99-4d20-484a-a65c-900653f85429"},"ext":null,"units_info":null},"to":{"value":"350eb0fa-6267-4500-a8d6-9077d0d933bd"},"from":{"value":"d212c9d5-49d8-477e-91a2-a81f099d516f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"76d8c0bc-49cd-4f8a-985f-0f44151f27de"},"ext":null,"units_info":null},"to":{"value":"cdbd78c0-e3d9-4055-921b-49d9fa8af4f0"},"from":{"value":"f2d4f823-b85a-4c3f-a257-6bb599027788"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"83aed557-9baf-4107-841d-ac0570109b6d"},"ext":null,"units_info":null},"to":{"value":"09017d78-0bae-4de6-9552-5939cf43837e"},"from":{"value":"4eb1ca69-9e90-4788-bc87-d254e148d3a2"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"bc53ef5d-64b7-474c-b08f-4803077339bf"},"ext":null,"units_info":null},"to":{"value":"732dab8b-88e2-4c49-ad28-167a57826879"},"from":{"value":"2313be90-da14-46fe-bbd7-54bd2efdd62f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"0f11b52b-4d76-4278-8ac7-bf2dd54d8bec"},"ext":null,"units_info":null},"to":{"value":"1fd0fcca-560c-432c-8f56-c0e78e190a93"},"from":{"value":"367d6df0-b518-4034-8a6c-72492bd2b6bb"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"cfd1f896-fcfa-42db-bcf3-254319e20394"},"ext":null,"units_info":null},"to":{"value":"d1f7a145-8763-4cdf-b499-03b2e6c042ee"},"from":{"value":"60325cf0-2d69-4f44-ac2a-da4256fcb6cb"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"1c66276d-0233-471d-be6f-5ef1924f6eab"},"ext":null,"units_info":null},"to":{"value":"4bdd3592-4aae-4f6e-9d06-2f8a914f8291"},"from":{"value":"221d393d-2d2e-44b4-b82c-68a1d6d8b58b"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"bda10a1d-5b2d-400a-be33-f37fcef1302e"},"ext":null,"units_info":null},"to":{"value":"dc90fcb0-7507-41f5-a612-7868ad4fc22e"},"from":{"value":"350eb0fa-6267-4500-a8d6-9077d0d933bd"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"8a90daad-d03f-4d41-b9ce-5cccda98f515"},"ext":null,"units_info":null},"to":{"value":"367d6df0-b518-4034-8a6c-72492bd2b6bb"},"from":{"value":"acebae3e-4686-4d49-80a4-f723fdcf422f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"edc6b9bc-1a53-48b9-a5d3-e098d57677a4"},"ext":null,"units_info":null},"to":{"value":"f36ee200-bdb0-4365-8742-9708bb98dc33"},"from":{"value":"56492fc8-f2bc-47d2-a91d-8ab5cf8ed0bf"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"f3acd499-1120-4821-96e2-a32bbd217062"},"ext":null,"units_info":null},"to":{"value":"d0e5efa9-6aba-441c-859d-ab21f80bd931"},"from":{"value":"7e1d78ef-4352-4fab-9a0c-8119d5844781"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"484d5292-8217-4c32-bc6f-f93ff3414339"},"ext":null,"units_info":null},"to":{"value":"958448d3-d1ac-4d89-a7f8-04053fd8dbf7"},"from":{"value":"7dc820fe-4fd9-40d7-a308-cc16f44c259a"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"e55ca94b-0bc3-451b-9fe8-24de410eb9d7"},"ext":null,"units_info":null},"to":{"value":"acebae3e-4686-4d49-80a4-f723fdcf422f"},"from":{"value":"303d3153-2035-4054-85e5-97f3c5334cae"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"3e6c223e-b6b4-4c5d-84b5-1e107b9bb785"},"ext":null,"units_info":null},"to":{"value":"7e1d78ef-4352-4fab-9a0c-8119d5844781"},"from":{"value":"c9e969ee-0360-47ac-bb9e-1fa7c9686021"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"5a4ae0ed-3b47-47a1-8a4e-bfabc9a44efb"},"ext":null,"units_info":null},"to":{"value":"4bdd3592-4aae-4f6e-9d06-2f8a914f8291"},"from":{"value":"acebae3e-4686-4d49-80a4-f723fdcf422f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"607959a7-bd13-46f2-b516-3da2d5088dac"},"ext":null,"units_info":null},"to":{"value":"6f3bc9ff-1c1d-4b15-ae3a-1347c1feb75b"},"from":{"value":"732dab8b-88e2-4c49-ad28-167a57826879"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"1c8366a9-5586-4c6d-999c-3d563c3ae902"},"ext":null,"units_info":null},"to":{"value":"09017d78-0bae-4de6-9552-5939cf43837e"},"from":{"value":"6272599c-9e1f-44e6-8376-72121e8ac970"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"b70c213d-cdd4-4e97-b266-f489b99f1ccf"},"ext":null,"units_info":null},"to":{"value":"33b01702-9b2b-496d-a084-4e7d0285d1c1"},"from":{"value":"d702b325-6ec5-4597-b462-c1ce5f8c1578"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"8c65d8df-33d2-47a5-bb88-215b74ba5186"},"ext":null,"units_info":null},"to":{"value":"89862d38-29d4-4d40-9c08-3b1254aae7fd"},"from":{"value":"3a7c6bf7-e76d-4ade-afb4-05f0ff0cdddd"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"1e487ed2-7062-4eb6-ae74-5b548292191d"},"ext":null,"units_info":null},"to":{"value":"732dab8b-88e2-4c49-ad28-167a57826879"},"from":{"value":"91615274-0935-4bd1-983a-9a0397a25d92"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"be61cba1-a34a-4943-bac1-c37aa37f1fc7"},"ext":null,"units_info":null},"to":{"value":"6272599c-9e1f-44e6-8376-72121e8ac970"},"from":{"value":"2a086534-9378-412f-957e-b88d78cd804d"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"e6e7b6ae-66b0-413e-b2f1-4de92700785e"},"ext":null,"units_info":null},"to":{"value":"6f3bc9ff-1c1d-4b15-ae3a-1347c1feb75b"},"from":{"value":"dc90fcb0-7507-41f5-a612-7868ad4fc22e"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"ff543e5a-0297-44bf-8b7f-d530156694a8"},"ext":null,"units_info":null},"to":{"value":"6fed2a6f-d989-4b2e-b5dd-ca2b75bb058d"},"from":{"value":"a8cc8bce-df7e-4a2e-ab6d-978c8ead4faa"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"2e07da55-f466-4199-a35d-e5728eaf9610"},"ext":null,"units_info":null},"to":{"value":"db09deae-f668-417c-a5b7-689e9c36efc9"},"from":{"value":"56492fc8-f2bc-47d2-a91d-8ab5cf8ed0bf"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"d968a652-8341-478f-b2a7-aa9c645abffe"},"ext":null,"units_info":null},"to":{"value":"6272599c-9e1f-44e6-8376-72121e8ac970"},"from":{"value":"7e1d78ef-4352-4fab-9a0c-8119d5844781"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"8346469a-720f-49ce-b69b-e107ce408eb6"},"ext":null,"units_info":null},"to":{"value":"f25908f6-24b3-48e8-aba9-cbb605169c48"},"from":{"value":"c207d005-44a7-41a5-bb98-aca4f1f6bee9"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"41258803-3a93-49eb-b066-d21c99349e56"},"ext":null,"units_info":null},"to":{"value":"3f89de57-ac01-4267-a82a-b069eac1ee24"},"from":{"value":"69e48628-2660-454a-9085-48c99d863012"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"af07d976-1cce-4fdb-a2fe-e3b34d4f5780"},"ext":null,"units_info":null},"to":{"value":"917d920b-6e3f-4fc5-9eeb-daf48c7df2b3"},"from":{"value":"f1fc491a-ec56-44ca-888c-2c7e45381334"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"0c2fb766-527f-4977-b1b2-11a60614a760"},"ext":null,"units_info":null},"to":{"value":"cc3f8b48-f40e-41de-b5df-9c0542019d0f"},"from":{"value":"2d433ab6-bf62-4ea7-b9ab-5e15d02c52e3"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"3287a8de-6587-4361-96fb-2a97bf863f71"},"ext":null,"units_info":null},"to":{"value":"cc3f8b48-f40e-41de-b5df-9c0542019d0f"},"from":{"value":"e17e4a10-16bd-4481-8aa5-1a228a65c33c"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"263e243b-0b50-4cd7-9e76-3469cd3887f5"},"ext":null,"units_info":null},"to":{"value":"4eb1ca69-9e90-4788-bc87-d254e148d3a2"},"from":{"value":"625ea2fd-5d08-4173-a8fc-f60800ef1533"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"4bd6e46a-8f2a-437e-a997-9a3a74b6f40a"},"ext":null,"units_info":null},"to":{"value":"a8cc8bce-df7e-4a2e-ab6d-978c8ead4faa"},"from":{"value":"db09deae-f668-417c-a5b7-689e9c36efc9"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"cc73331a-044e-44c9-bcbc-36de8726861d"},"ext":null,"units_info":null},"to":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"from":{"value":"ab9edaa7-4310-46a2-8ce0-de9f84c54995"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"96291a7d-8322-4c96-a693-cb36e4c21baa"},"ext":null,"units_info":null},"to":{"value":"fd4c192d-52b1-4ee2-9f83-99e99043cd6b"},"from":{"value":"381ba93f-587c-4f1a-b630-80aa09339c47"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"7bb740d8-ce97-43d8-97fe-ce16d99de963"},"ext":null,"units_info":null},"to":{"value":"e29b3c74-33b5-4eec-8836-85b35666c0ff"},"from":{"value":"1fd0fcca-560c-432c-8f56-c0e78e190a93"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"63b1fb27-1452-4e12-a362-db643b59da63"},"ext":null,"units_info":null},"to":{"value":"042bf3e4-a488-4274-b72c-217eb47ad92f"},"from":{"value":"08a7f936-3c86-4d40-9344-674aad6a17c8"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"dc783ee5-0e65-4065-b71d-830c441c6d3b"},"ext":null,"units_info":null},"to":{"value":"306ed745-ef31-4c2a-b8c3-191cfe87042b"},"from":{"value":"303d3153-2035-4054-85e5-97f3c5334cae"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"784644bb-37e4-4cf0-8ef6-d40f30079aef"},"ext":null,"units_info":null},"to":{"value":"6c15bee4-23b2-4a02-8320-c17d12ea30ea"},"from":{"value":"f2d4f823-b85a-4c3f-a257-6bb599027788"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"base_power":713.5,"prime_mover_type":"WT","rating":1.0,"services":[],"bus":{"value":"3c3c7143-9a74-49a1-b26d-436bc9ec1b67"},"available":true,"name":"122_WIND_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"7f912fa9-8075-4e58-8bde-81f69fe9dd2b"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.0,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"d1f7a145-8763-4cdf-b499-03b2e6c042ee"},"available":true,"name":"324_PV_3","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"075002e9-65cc-4401-b5de-a4c41c294d8d"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":94.1,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"5e67fd81-10ae-4a2e-860a-da7c82a49336"},"available":true,"name":"312_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"348fd649-7b46-431b-bf19-0555dbd97621"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":25.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"3a7c6bf7-e76d-4ade-afb4-05f0ff0cdddd"},"available":true,"name":"102_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"22c3daf3-69f5-4d58-9b55-106eb2f0afdd"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":25.9,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"5183e951-7348-4c03-b910-780387f676ab"},"available":true,"name":"101_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"1770a75a-3a8d-436a-b152-f4f6d3afef39"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"d1f7a145-8763-4cdf-b499-03b2e6c042ee"},"available":true,"name":"324_PV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"d7c8729a-888e-4bc6-a6c6-1b653add8e58"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":93.3,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_PV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"a4de71e3-0588-424d-a698-052fe909fbf1"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":26.8,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"89862d38-29d4-4d40-9c08-3b1254aae7fd"},"available":true,"name":"104_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"24d966c3-9ce8-4cbe-b8e2-ee0e6413f235"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":26.7,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"5183e951-7348-4c03-b910-780387f676ab"},"available":true,"name":"101_PV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"c4665c7d-c217-4c87-b856-8b4c3631ade1"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":148.3,"prime_mover_type":"WT","rating":1.0,"services":[],"bus":{"value":"732dab8b-88e2-4c49-ad28-167a57826879"},"available":true,"name":"309_WIND_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"34cef421-272d-474e-953c-5c1c94fc8bc1"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"dc90fcb0-7507-41f5-a612-7868ad4fc22e"},"available":true,"name":"310_PV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"43a4532f-fc7d-4aa3-8eb0-721643224c47"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":93.6,"prime_mover_type":"PVe","rating":1.9999999999999998,"services":[],"bus":{"value":"acebae3e-4686-4d49-80a4-f723fdcf422f"},"available":true,"name":"113_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"22415f24-10ce-44af-a23a-ded58a98ea5d"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":799.1,"prime_mover_type":"WT","rating":1.0,"services":[],"bus":{"value":"5febc718-ae81-4978-aa2c-b2dce9b8d1e5"},"available":true,"name":"317_WIND_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"78ea8dc1-467f-4915-9c48-76ad1b359555"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"221d393d-2d2e-44b4-b82c-68a1d6d8b58b"},"available":true,"name":"314_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"202f6aa2-6fff-42be-bcd1-62b0f08e2188"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":49.7,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"d1f7a145-8763-4cdf-b499-03b2e6c042ee"},"available":true,"name":"324_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"5e574ed0-698b-4cdc-86be-9655bcfe111c"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":61.5,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"91784f04-9d48-4c0c-bc4b-76f1f9a1202c"},"available":true,"name":"103_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"4a92e550-8bb7-46fc-8b05-15d5b13874b4"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":847.0,"prime_mover_type":"WT","rating":1.0,"services":[],"bus":{"value":"2313be90-da14-46fe-bbd7-54bd2efdd62f"},"available":true,"name":"303_WIND_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"f4acfc8b-64f5-4aeb-beb9-0feede79569b"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"221d393d-2d2e-44b4-b82c-68a1d6d8b58b"},"available":true,"name":"314_PV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"798b49dc-ccf5-44e2-ba73-d46db40ac535"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":25.3,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"3a7c6bf7-e76d-4ade-afb4-05f0ff0cdddd"},"available":true,"name":"102_PV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"1d50b3b7-2d27-467d-bc65-8c18a235bdf7"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":92.7,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"221d393d-2d2e-44b4-b82c-68a1d6d8b58b"},"available":true,"name":"314_PV_3","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"f710d4d5-c6c3-486b-901c-c48621f9df9b"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"f1fc491a-ec56-44ca-888c-2c7e45381334"},"available":true,"name":"320_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"957b7279-3051-4550-9a28-af31bb0f1a1a"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":26.2,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"5183e951-7348-4c03-b910-780387f676ab"},"available":true,"name":"101_PV_3","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"9345a5b3-e2f5-4f27-94d9-236aab221bb0"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":188.2,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"f9f77224-993f-49db-b8c2-6513bf9b832a"},"available":true,"name":"319_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"336ca099-0f28-43ce-a8a5-e4d4b4c6b5a7"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"221d393d-2d2e-44b4-b82c-68a1d6d8b58b"},"available":true,"name":"314_PV_4","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"c02b1028-ad4b-4db0-a801-baf23a2fa453"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.7,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"dc90fcb0-7507-41f5-a612-7868ad4fc22e"},"available":true,"name":"310_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"3d14553a-d40a-4768-a77c-c9b25405c98f"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":125.1,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"367d6df0-b518-4034-8a6c-72492bd2b6bb"},"available":true,"name":"215_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"c2aa9b93-a2cd-4ddb-9b9c-95f3143989b0"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":95.1,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"ca81d4a5-823a-42d0-bf1c-1bf1eabe2c14"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":25.8,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"5183e951-7348-4c03-b910-780387f676ab"},"available":true,"name":"101_PV_4","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"46de6d0e-ff29-462c-933c-7328980555f9"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":66.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"381ba93f-587c-4f1a-b630-80aa09339c47"},"available":true,"name":"119_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"64f6f219-2e57-40d9-b360-c525bd676a19"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"load_response":0.0,"name":"1","internal":{"uuid":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":null,"units_info":null},"ext":{},"peak_active_power":0.0,"peak_reactive_power":0.0,"__metadata__":{"module":"PowerSystems","type":"Area"}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"C31-2","reactive_power_flow":0.0,"arc":{"value":"63b1fb27-1452-4e12-a362-db643b59da63"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"f674aae4-78a6-462c-b1f8-132ab4a595d0"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.104,"b":{"from":0.014,"to":0.014},"r":0.027,"available":true,"name":"B8","reactive_power_flow":0.0,"arc":{"value":"432960a2-3c8a-4a5b-98e3-6b19d60cfbc2"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"6d8655c7-540c-4395-97e9-7b32df1054be"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.052,"b":{"from":0.0545,"to":0.0545},"r":0.007,"available":true,"name":"B26","reactive_power_flow":0.0,"arc":{"value":"635afab5-f185-4430-9992-74e4e4d6f66a"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"46ba81fd-b7b4-42ee-9936-d079c939aa3c"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.04,"b":{"from":0.0415,"to":0.0415},"r":0.005,"available":true,"name":"A32-2","reactive_power_flow":0.0,"arc":{"value":"96291a7d-8322-4c96-a693-cb36e4c21baa"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"f753bd41-3133-468a-bac5-606375ddf4c5"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.097,"b":{"from":0.1015,"to":0.1015},"r":0.012,"available":true,"name":"CA-1","reactive_power_flow":0.0,"arc":{"value":"0c2fb766-527f-4977-b1b2-11a60614a760"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"39470111-853f-4bf8-ae6f-6af8200fa352"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.192,"b":{"from":0.026,"to":0.026},"r":0.05,"available":true,"name":"A5","reactive_power_flow":0.0,"arc":{"value":"b77d2e8c-3fe9-4f09-aff1-1c5b99baeef9"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"432f8615-d5b5-45ac-8e55-5705f159b3af"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.068,"b":{"from":0.071,"to":0.071},"r":0.009,"available":true,"name":"B34","reactive_power_flow":0.0,"arc":{"value":"7bb740d8-ce97-43d8-97fe-ce16d99de963"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"c209489b-f475-411f-b479-33c1bce3f374"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.042,"b":{"from":0.044,"to":0.044},"r":0.005,"available":true,"name":"B19","reactive_power_flow":0.0,"arc":{"value":"76d8c0bc-49cd-4f8a-985f-0f44151f27de"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"4b7e06c2-c7a0-494e-9dcd-103f1549a05b"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"B31-2","reactive_power_flow":0.0,"arc":{"value":"1c91977b-8884-4604-a3f6-6ad04d7adb28"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"754502db-0164-46b2-9641-8fb9b292de3d"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.105,"b":{"from":0.1105,"to":0.1105},"r":0.014,"available":true,"name":"C30","reactive_power_flow":0.0,"arc":{"value":"3ff8586c-1d60-4b65-96db-b0f7103ee261"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"8e44bfa4-be04-45c6-86e3-3ad9757b1e65"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"B27","reactive_power_flow":0.0,"arc":{"value":"7ba7ddb9-72d3-47e0-863f-5ac154b66117"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"1d2bb8db-d232-495b-8bbc-2eadc7a9bb08"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.097,"b":{"from":0.1015,"to":0.1015},"r":0.012,"available":true,"name":"A21","reactive_power_flow":0.0,"arc":{"value":"ff543e5a-0297-44bf-8b7f-d530156694a8"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"883c3210-6830-4ed4-af6f-73f1281a52f7"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.04,"b":{"from":0.0415,"to":0.0415},"r":0.005,"available":true,"name":"A32-1","reactive_power_flow":0.0,"arc":{"value":"96291a7d-8322-4c96-a693-cb36e4c21baa"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"01a8d3d4-7545-41be-ba8d-833e16f57b9b"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.014,"b":{"from":0.015,"to":0.015},"r":0.002,"available":true,"name":"B29","reactive_power_flow":0.0,"arc":{"value":"8346469a-720f-49ce-b69b-e107ce408eb6"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"a598ed5a-4b78-4553-a55c-0fbf298bfba4"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.048,"b":{"from":0.05,"to":0.05},"r":0.006,"available":true,"name":"A18","reactive_power_flow":0.0,"arc":{"value":"e55ca94b-0bc3-451b-9fe8-24de410eb9d7"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"9fe93857-ac54-4db7-b9d9-9995672ca40a"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.192,"b":{"from":0.026,"to":0.026},"r":0.05,"available":true,"name":"C5","reactive_power_flow":0.0,"arc":{"value":"b8a4af46-03a1-436f-86bb-85aac1544722"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"11e3366b-d5f2-4d0f-a326-beaefc09e7c0"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.165,"b":{"from":0.0225,"to":0.0225},"r":0.043,"available":true,"name":"C13-2","reactive_power_flow":0.0,"arc":{"value":"22b695d3-73f9-4bc8-b160-3fd9764ee87f"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"43202123-7469-4c4c-a819-ce4aeaf95c8b"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.017,"b":{"from":0.018,"to":0.018},"r":0.002,"available":true,"name":"C24","reactive_power_flow":0.0,"arc":{"value":"143c52b0-64c4-4701-b4b6-1ee139b094b7"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"d2c1cb48-2709-40ef-8aa9-e801ad5b6853"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.023,"b":{"from":0.0245,"to":0.0245},"r":0.003,"available":true,"name":"C28","reactive_power_flow":0.0,"arc":{"value":"94a79643-f10f-4308-9ccb-512f554df31b"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"ee1fecb6-9a19-4832-acb0-d8081c3a9306"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.014,"b":{"from":0.015,"to":0.015},"r":0.002,"available":true,"name":"A29","reactive_power_flow":0.0,"arc":{"value":"cc73331a-044e-44c9-bcbc-36de8726861d"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"71382fd7-3d3e-4d21-8b71-5137b46455b2"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.085,"b":{"from":0.0115,"to":0.0115},"r":0.022,"available":true,"name":"A3","reactive_power_flow":0.0,"arc":{"value":"dedca241-3cbe-4a51-abff-f76f189d6395"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"5d4993d1-53df-4a1c-88d5-c036b0682144"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.161,"b":{"from":0.022,"to":0.022},"r":0.042,"available":true,"name":"AB1","reactive_power_flow":0.0,"arc":{"value":"3e6c223e-b6b4-4c5d-84b5-1e107b9bb785"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"9264a0d4-02d6-41f3-a51a-bb9e70e8463c"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.075,"b":{"from":0.079,"to":0.079},"r":0.01,"available":true,"name":"AB2","reactive_power_flow":0.0,"arc":{"value":"8a90daad-d03f-4d41-b9ce-5cccda98f515"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"b1adc6e0-cb44-4f33-a6ef-ac3ef5530479"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"C27","reactive_power_flow":0.0,"arc":{"value":"9204a5e0-e429-4a35-9851-fbc1b92dd7d3"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"5855416c-a6c0-44f5-94a2-ae96a6057302"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":7.22,"services":[],"x":0.009,"b":{"from":0.0,"to":0.0},"r":0.0,"available":true,"name":"C35","reactive_power_flow":0.0,"arc":{"value":"0dce208b-cafb-4a3f-9745-84d01707bb9e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"fa15a417-f362-4cef-ae89-b0efddc22d85"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.049,"b":{"from":0.0515,"to":0.0515},"r":0.006,"available":true,"name":"A25-1","reactive_power_flow":0.0,"arc":{"value":"3287a8de-6587-4361-96fb-2a97bf863f71"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"513d69ff-81a7-4e4b-94c8-c733fb50e0c8"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.192,"b":{"from":0.026,"to":0.026},"r":0.05,"available":true,"name":"B5","reactive_power_flow":0.0,"arc":{"value":"0ae20894-019c-4072-95e3-911abac3fcbf"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"fa0c4029-bbfc-47ac-a478-6d46273011d5"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.211,"b":{"from":0.0285,"to":0.0285},"r":0.055,"available":true,"name":"B2","reactive_power_flow":0.0,"arc":{"value":"f5fa5960-1ff6-4c65-b8b9-868eb7e82247"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e8834d99-3d27-488f-be3b-a1e38b4f5d40"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"B31-1","reactive_power_flow":0.0,"arc":{"value":"1c91977b-8884-4604-a3f6-6ad04d7adb28"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"46cf1e65-737d-46d1-a40f-005655a65813"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.048,"b":{"from":0.05,"to":0.05},"r":0.006,"available":true,"name":"C20","reactive_power_flow":0.0,"arc":{"value":"90f82c3e-f201-493a-a2e5-36c3ea39752b"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"39a1f92c-efdc-451f-9ad8-0e9fe25579d0"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.059,"b":{"from":0.041,"to":0.041},"r":0.005,"available":true,"name":"B23","reactive_power_flow":0.0,"arc":{"value":"16312a4e-1806-4bbc-9684-c559ae2ada89"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"58bcc053-d460-46af-b813-879ab4465c46"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.023,"b":{"from":0.0245,"to":0.0245},"r":0.003,"available":true,"name":"A28","reactive_power_flow":0.0,"arc":{"value":"3e607ec6-7158-4180-a3f4-210109a82df2"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"6de8bf23-9ecd-4661-94aa-7f110cb90581"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.042,"b":{"from":0.044,"to":0.044},"r":0.005,"available":true,"name":"A19","reactive_power_flow":0.0,"arc":{"value":"dc783ee5-0e65-4065-b71d-830c441c6d3b"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"b4cba839-c0a1-4483-8703-1cb806dddfa2"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.088,"b":{"from":0.012,"to":0.012},"r":0.023,"available":true,"name":"C9","reactive_power_flow":0.0,"arc":{"value":"bda10a1d-5b2d-400a-be33-f37fcef1302e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e80b6b71-37bf-4f41-8edf-37e4dadbad85"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.014,"b":{"from":0.2305,"to":0.2305},"r":0.003,"available":true,"name":"C1","reactive_power_flow":0.0,"arc":{"value":"20f0c6e2-ab97-4825-bf1e-fd54e6e17029"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"14c7689e-6741-48a0-bbb3-495c10eb663a"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.211,"b":{"from":0.0285,"to":0.0285},"r":0.055,"available":true,"name":"C2","reactive_power_flow":0.0,"arc":{"value":"042d82bb-5801-42d5-a470-889aebeef05c"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"73f204cb-58d4-4d34-ba29-26e9f8186994"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.049,"b":{"from":0.0515,"to":0.0515},"r":0.006,"available":true,"name":"B25-1","reactive_power_flow":0.0,"arc":{"value":"0f11b52b-4d76-4278-8ac7-bf2dd54d8bec"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"c0a97391-5b81-40dd-bbfd-0ca04f1bce6f"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.088,"b":{"from":0.012,"to":0.012},"r":0.023,"available":true,"name":"A9","reactive_power_flow":0.0,"arc":{"value":"d41f1b2b-daeb-4e85-be76-041d876f5270"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"129e5b00-8ffe-4e01-93c7-b3efc7100eb2"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.061,"b":{"from":0.0085,"to":0.0085},"r":0.016,"available":true,"name":"C11","reactive_power_flow":0.0,"arc":{"value":"05533484-7459-4c82-bbba-3d2ee12589dd"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"277cd8df-eed5-4f16-9940-c7852282ac04"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.042,"b":{"from":0.044,"to":0.044},"r":0.005,"available":true,"name":"C19","reactive_power_flow":0.0,"arc":{"value":"1415927f-4d06-4315-afcc-8bc6f9f51e97"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"6c537b76-a021-452a-a05f-591583141de2"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.059,"b":{"from":0.041,"to":0.041},"r":0.005,"available":true,"name":"C23","reactive_power_flow":0.0,"arc":{"value":"1c66276d-0233-471d-be6f-5ef1924f6eab"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"76a125b4-8dbd-43b5-b37f-6ecf5ed0741f"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.049,"b":{"from":0.0515,"to":0.0515},"r":0.006,"available":true,"name":"C25-1","reactive_power_flow":0.0,"arc":{"value":"44126cde-d70d-4cb8-a9b6-5921dfd139bb"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"f7d89758-7cf2-40f4-8df7-73eed64c761f"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.04,"b":{"from":0.0415,"to":0.0415},"r":0.005,"available":true,"name":"C32-2","reactive_power_flow":0.0,"arc":{"value":"94aba903-40da-424f-b1c0-d2fae7628265"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"1e64ae22-58a5-46f0-8adb-add42dca3649"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.048,"b":{"from":0.05,"to":0.05},"r":0.006,"available":true,"name":"B20","reactive_power_flow":0.0,"arc":{"value":"b92b6f49-181d-4cea-930e-4c09562cd806"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"f4b85fc4-d981-4053-b7d9-b3826b294a02"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.088,"b":{"from":0.012,"to":0.012},"r":0.023,"available":true,"name":"B9","reactive_power_flow":0.0,"arc":{"value":"cea5a2cb-6d29-4c98-b916-5a247400f6b9"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"a07d43af-86c8-403b-aac3-5ec968ed13fb"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.049,"b":{"from":0.0515,"to":0.0515},"r":0.006,"available":true,"name":"C25-2","reactive_power_flow":0.0,"arc":{"value":"44126cde-d70d-4cb8-a9b6-5921dfd139bb"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"8d740691-20a7-43f2-8f3d-374e39d0616a"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.165,"b":{"from":0.0225,"to":0.0225},"r":0.043,"available":true,"name":"C12-1","reactive_power_flow":0.0,"arc":{"value":"5096832c-c4b6-4624-81b4-645dbe3b8d96"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"65e07579-dc88-4f66-81b4-1e75ecc37c4d"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"A27","reactive_power_flow":0.0,"arc":{"value":"c3f8da4f-0667-4fbb-b09c-590fa4977b78"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"60a048f9-f8f1-4fb7-8aab-30e7e90f6137"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.097,"b":{"from":0.1015,"to":0.1015},"r":0.012,"available":true,"name":"C21","reactive_power_flow":0.0,"arc":{"value":"0c4061be-0dfd-4db7-9794-08eec522f815"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"4b853d99-27fa-4a89-a369-33b54355479e"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.068,"b":{"from":0.071,"to":0.071},"r":0.009,"available":true,"name":"A34","reactive_power_flow":0.0,"arc":{"value":"d00dc0cc-727e-4477-8c3f-6306904e74d5"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"f6b5e741-d5d2-4097-b3ca-a7ef4f576fd7"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.04,"b":{"from":0.0415,"to":0.0415},"r":0.005,"available":true,"name":"B32-1","reactive_power_flow":0.0,"arc":{"value":"a9f1f485-d758-4ec0-980f-93a707ee343d"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"79c05631-23d7-44fa-98c1-0e904d115ffc"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.165,"b":{"from":0.0225,"to":0.0225},"r":0.043,"available":true,"name":"A12-1","reactive_power_flow":0.0,"arc":{"value":"edc6b9bc-1a53-48b9-a5d3-e098d57677a4"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"28c2e045-4d3f-4025-9666-60160547582c"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.022,"b":{"from":0.023,"to":0.023},"r":0.003,"available":true,"name":"B33-1","reactive_power_flow":0.0,"arc":{"value":"a12673c6-cb5e-4c52-ba6f-20aee693ff1e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"a485a2f0-bec0-4fae-8bc4-be1d0003ac5e"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.014,"b":{"from":0.2305,"to":0.2305},"r":0.003,"available":true,"name":"B1","reactive_power_flow":0.0,"arc":{"value":"a4cb489e-588b-4a60-bc34-aed83e0a8131"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"60eae6f3-4480-48ef-98df-8e1f1e8e66fc"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.127,"b":{"from":0.017,"to":0.017},"r":0.033,"available":true,"name":"A4","reactive_power_flow":0.0,"arc":{"value":"8c65d8df-33d2-47a5-bb88-215b74ba5186"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"2255d957-1c4e-41a3-89e8-83f08fa3ae1f"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.052,"b":{"from":0.0545,"to":0.0545},"r":0.007,"available":true,"name":"C26","reactive_power_flow":0.0,"arc":{"value":"cfd1f896-fcfa-42db-bcf3-254319e20394"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"ed739b82-83e7-4546-b014-febe1200a2de"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.127,"b":{"from":0.017,"to":0.017},"r":0.033,"available":true,"name":"B4","reactive_power_flow":0.0,"arc":{"value":"b70c213d-cdd4-4e97-b266-f489b99f1ccf"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"f85d890d-7d5b-4d8f-80ea-ef2fb1edc623"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.087,"b":{"from":0.091,"to":0.091},"r":0.011,"available":true,"name":"A22","reactive_power_flow":0.0,"arc":{"value":"63a27f4a-f7f7-482d-8fd7-ed06df53b297"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"f4bef699-2912-494d-9cd6-e405b97d638f"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"A31-1","reactive_power_flow":0.0,"arc":{"value":"70f6ed82-06bd-45e3-82ab-8db89f8e6997"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"89f33389-a96f-4952-aeeb-a851d220c2cb"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.022,"b":{"from":0.023,"to":0.023},"r":0.003,"available":true,"name":"A33-2","reactive_power_flow":0.0,"arc":{"value":"2e22b71b-7f0b-4665-a9e0-f948450ea38d"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"f5e3b9f5-de70-4e59-8646-2ea7fb825bfa"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.074,"b":{"from":0.0775,"to":0.0775},"r":0.01,"available":true,"name":"AB3","reactive_power_flow":0.0,"arc":{"value":"16174f70-79d8-4ca1-a620-25c48b1995ff"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"ba43c516-5b87-4303-b380-9f7453707592"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.104,"b":{"from":0.014,"to":0.014},"r":0.027,"available":true,"name":"A8","reactive_power_flow":0.0,"arc":{"value":"2f6e01d0-588e-4f22-9600-14a968159846"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"412c9b93-e08c-4968-ac68-4113b8a6e899"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"A31-2","reactive_power_flow":0.0,"arc":{"value":"70f6ed82-06bd-45e3-82ab-8db89f8e6997"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"f0629eea-98a2-4195-9ea8-8161ffffb857"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.022,"b":{"from":0.023,"to":0.023},"r":0.003,"available":true,"name":"C33-2","reactive_power_flow":0.0,"arc":{"value":"af07d976-1cce-4fdb-a2fe-e3b34d4f5780"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"9c0ff0fb-0621-48b2-9f54-00662a8b822b"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.061,"b":{"from":1.2295,"to":1.2295},"r":0.014,"available":true,"name":"C10","reactive_power_flow":0.0,"arc":{"value":"413516c0-cb6e-4bb8-901c-43291791824d"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"35277f03-b48d-4e38-a7dc-58737ae77b2b"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.104,"b":{"from":0.109,"to":0.109},"r":0.013,"available":true,"name":"CB-1","reactive_power_flow":0.0,"arc":{"value":"b5bc36ad-acd1-40a7-8a14-951ddf614a19"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"56b521fc-1d31-42fe-8b73-7fb6654314ea"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.052,"b":{"from":0.0545,"to":0.0545},"r":0.007,"available":true,"name":"A26","reactive_power_flow":0.0,"arc":{"value":"84147d80-8165-43fc-b6a1-c6fc05c6b30a"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"3c48589b-cf73-4d4c-b657-d0f906ca16e6"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.119,"b":{"from":0.016,"to":0.016},"r":0.031,"available":true,"name":"A6","reactive_power_flow":0.0,"arc":{"value":"3fa6661b-02bf-4d6b-9bf9-89b5383c29d5"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"96f09e5f-c881-41ef-804d-e2128e05f3b4"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.022,"b":{"from":0.023,"to":0.023},"r":0.003,"available":true,"name":"C33-1","reactive_power_flow":0.0,"arc":{"value":"af07d976-1cce-4fdb-a2fe-e3b34d4f5780"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e050405c-dbf3-4df1-ad20-1f41604f73a0"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.097,"b":{"from":0.1015,"to":0.1015},"r":0.012,"available":true,"name":"B21","reactive_power_flow":0.0,"arc":{"value":"573876a5-c1f8-4d0c-bcb7-a42497d770a2"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"f869dd82-b8c2-42f1-aacb-153c3822db4e"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.014,"b":{"from":0.015,"to":0.015},"r":0.002,"available":true,"name":"C29","reactive_power_flow":0.0,"arc":{"value":"60c83c1b-462b-4b67-a4c6-0217aa86b389"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"5a7129e9-9bdb-447b-aeb5-06fa5992e0ce"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.127,"b":{"from":0.017,"to":0.017},"r":0.033,"available":true,"name":"C4","reactive_power_flow":0.0,"arc":{"value":"5b411f3c-5e11-4561-af28-cebb88c6c00b"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"df2e6a9a-9167-4505-9eed-b05792b68c06"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.048,"b":{"from":0.05,"to":0.05},"r":0.006,"available":true,"name":"C18","reactive_power_flow":0.0,"arc":{"value":"785c39ec-c4a6-4cab-b070-43505ee74d45"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"b05f6685-2ba8-4032-9132-2756561edd5c"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.049,"b":{"from":0.0515,"to":0.0515},"r":0.006,"available":true,"name":"A25-2","reactive_power_flow":0.0,"arc":{"value":"3287a8de-6587-4361-96fb-2a97bf863f71"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"aae5caed-8d38-42bd-9f64-dde65d73c2da"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.087,"b":{"from":0.091,"to":0.091},"r":0.011,"available":true,"name":"B22","reactive_power_flow":0.0,"arc":{"value":"bff3fb35-5932-4a78-a966-d23d83085207"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"325b961d-6311-4091-b58a-16ad5eb6f8f1"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.014,"b":{"from":0.2305,"to":0.2305},"r":0.003,"available":true,"name":"A1","reactive_power_flow":0.0,"arc":{"value":"15ed3fa9-44d1-4546-9aae-850d1759ec45"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"130a8d7d-c8a4-4536-a39b-89f832802ccb"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.105,"b":{"from":0.1105,"to":0.1105},"r":0.014,"available":true,"name":"B30","reactive_power_flow":0.0,"arc":{"value":"d2d1be77-31fb-4844-a07d-b5f0f8c0302e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e81b5c7e-0b8c-4fe2-8f56-9151c3904218"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.061,"b":{"from":0.0085,"to":0.0085},"r":0.016,"available":true,"name":"B11","reactive_power_flow":0.0,"arc":{"value":"6c7e2c31-cf59-4cd4-91df-7f4c9be2e3bd"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"4712bdef-e91f-4aaa-8e50-883044855c19"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.085,"b":{"from":0.0115,"to":0.0115},"r":0.022,"available":true,"name":"C3","reactive_power_flow":0.0,"arc":{"value":"5a610b99-4d20-484a-a65c-900653f85429"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"2d97ffc4-0c76-46a3-86aa-dff7e9b66721"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.022,"b":{"from":0.023,"to":0.023},"r":0.003,"available":true,"name":"A33-1","reactive_power_flow":0.0,"arc":{"value":"2e22b71b-7f0b-4665-a9e0-f948450ea38d"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"19598182-cf40-4fe8-bce8-1b61f97b23e3"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.165,"b":{"from":0.0225,"to":0.0225},"r":0.043,"available":true,"name":"B13-2","reactive_power_flow":0.0,"arc":{"value":"9fb8938b-37cf-4b5f-8535-f77e51c9277b"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"fba29bbb-4cb4-4f0f-88fb-a67c4b7b726c"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"C31-1","reactive_power_flow":0.0,"arc":{"value":"63b1fb27-1452-4e12-a362-db643b59da63"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"0d5e5df5-d015-43e5-b3b4-8c9e01a2b880"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.048,"b":{"from":0.05,"to":0.05},"r":0.006,"available":true,"name":"A20","reactive_power_flow":0.0,"arc":{"value":"b215820e-c9e3-42e4-b385-89b0d90597eb"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"a75f6b7c-5ccc-434c-bcc5-d560faf62852"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.165,"b":{"from":0.0225,"to":0.0225},"r":0.043,"available":true,"name":"B12-1","reactive_power_flow":0.0,"arc":{"value":"be61cba1-a34a-4943-bac1-c37aa37f1fc7"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"3e93b2af-aa24-44ff-b62f-01926c37baab"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.085,"b":{"from":0.0115,"to":0.0115},"r":0.022,"available":true,"name":"B3","reactive_power_flow":0.0,"arc":{"value":"41258803-3a93-49eb-b066-d21c99349e56"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"dfe8a64c-786e-4258-a50c-bfb1f5ce0b56"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.017,"b":{"from":0.018,"to":0.018},"r":0.002,"available":true,"name":"B24","reactive_power_flow":0.0,"arc":{"value":"fec15af8-ad3d-44ea-8045-3e2285cb15ca"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"0869d74d-91c3-4c50-a67a-ea61d7634a87"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.211,"b":{"from":0.0285,"to":0.0285},"r":0.055,"available":true,"name":"A2","reactive_power_flow":0.0,"arc":{"value":"8d8c7458-95c9-4edf-ab3c-0f5e61e85720"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"667df300-c59d-4678-914d-8c75e0cc5ac2"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.119,"b":{"from":0.016,"to":0.016},"r":0.031,"available":true,"name":"B6","reactive_power_flow":0.0,"arc":{"value":"d968a652-8341-478f-b2a7-aa9c645abffe"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"772182b1-e5b3-40ec-b29d-4a1728ffaffb"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.165,"b":{"from":0.0225,"to":0.0225},"r":0.043,"available":true,"name":"A13-2","reactive_power_flow":0.0,"arc":{"value":"2e07da55-f466-4199-a35d-e5728eaf9610"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"0c906f68-61ba-4569-8ae1-1a4ade083a60"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.023,"b":{"from":0.0245,"to":0.0245},"r":0.003,"available":true,"name":"B28","reactive_power_flow":0.0,"arc":{"value":"484d5292-8217-4c32-bc6f-f93ff3414339"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"677204f4-6283-4f6a-9af0-38beadfb838f"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.059,"b":{"from":0.041,"to":0.041},"r":0.005,"available":true,"name":"A23","reactive_power_flow":0.0,"arc":{"value":"a069ea71-4562-4d45-8ec2-3f75546e5019"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"30b1a7d3-0333-48d0-8460-9e0b02d8aea5"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.104,"b":{"from":0.014,"to":0.014},"r":0.027,"available":true,"name":"C8","reactive_power_flow":0.0,"arc":{"value":"1e487ed2-7062-4eb6-ae74-5b548292191d"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"b5c35a93-e4a7-4017-a8c1-5847c29d0ba3"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.04,"b":{"from":0.0415,"to":0.0415},"r":0.005,"available":true,"name":"B32-2","reactive_power_flow":0.0,"arc":{"value":"a9f1f485-d758-4ec0-980f-93a707ee343d"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"a99adbe4-62b5-4bbf-860e-73775f648781"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.017,"b":{"from":0.018,"to":0.018},"r":0.002,"available":true,"name":"A24","reactive_power_flow":0.0,"arc":{"value":"8df9d165-303c-4865-a792-272e50d244c2"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"c0332431-b2e8-4108-a9e4-d70ec94348de"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.022,"b":{"from":0.023,"to":0.023},"r":0.003,"available":true,"name":"B33-2","reactive_power_flow":0.0,"arc":{"value":"a12673c6-cb5e-4c52-ba6f-20aee693ff1e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"7bd5535d-2a1c-4ca7-9c35-1d7f5ca16ca7"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.105,"b":{"from":0.1105,"to":0.1105},"r":0.014,"available":true,"name":"A30","reactive_power_flow":0.0,"arc":{"value":"fd8ff567-294b-42ad-b693-66a418f3be26"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"ea6fa412-e5c5-4588-9ac0-519bde0ab8f5"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.061,"b":{"from":1.2295,"to":1.2295},"r":0.014,"available":true,"name":"B10","reactive_power_flow":0.0,"arc":{"value":"263e243b-0b50-4cd7-9e76-3469cd3887f5"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e2178e0b-51fa-4ba6-849a-a538ba4e7b74"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.049,"b":{"from":0.0515,"to":0.0515},"r":0.006,"available":true,"name":"B25-2","reactive_power_flow":0.0,"arc":{"value":"0f11b52b-4d76-4278-8ac7-bf2dd54d8bec"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"329132c6-3454-4b6f-8ceb-e6d4b85b1b96"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.061,"b":{"from":1.2295,"to":1.2295},"r":0.014,"available":true,"name":"A10","reactive_power_flow":0.0,"arc":{"value":"ef09397f-4c69-43f9-89d3-1637b5096370"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"ed82ba7d-6875-46ae-89c4-a3fb210f0efc"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.087,"b":{"from":0.091,"to":0.091},"r":0.011,"available":true,"name":"C22","reactive_power_flow":0.0,"arc":{"value":"7d14a652-3827-43e6-8717-7b77f306133f"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"0c70df07-1048-45c1-9d5c-8fb3a86e94c0"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.119,"b":{"from":0.016,"to":0.016},"r":0.031,"available":true,"name":"C6","reactive_power_flow":0.0,"arc":{"value":"bc53ef5d-64b7-474c-b08f-4803077339bf"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"ae8c9759-e6a5-4a52-b9e9-134fda1a4065"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.061,"b":{"from":0.0085,"to":0.0085},"r":0.016,"available":true,"name":"A11","reactive_power_flow":0.0,"arc":{"value":"da9c39b9-2d79-44a9-bda8-16a3c055dfeb"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"702a770a-265e-4cf9-94ac-7d63c42d52da"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.068,"b":{"from":0.071,"to":0.071},"r":0.009,"available":true,"name":"C34","reactive_power_flow":0.0,"arc":{"value":"2a6b75af-0075-49ed-8616-5e013931e32e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"4a8879b7-b7fb-47ec-8422-eb9cd2d6051d"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.04,"b":{"from":0.0415,"to":0.0415},"r":0.005,"available":true,"name":"C32-1","reactive_power_flow":0.0,"arc":{"value":"94aba903-40da-424f-b1c0-d2fae7628265"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"8c72fc63-2299-4ac5-8eaa-7ac1f8fc27e2"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.048,"b":{"from":0.05,"to":0.05},"r":0.006,"available":true,"name":"B18","reactive_power_flow":0.0,"arc":{"value":"784644bb-37e4-4cf0-8ef6-d40f30079aef"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"a03a48e6-80d7-4da2-8b9c-ebdd868257d3"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"base_power":100.0,"services":[],"bus":{"value":"d702b325-6ec5-4597-b462-c1ce5f8c1578"},"available":true,"name":"Bacon","active_power":0.97,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.97,"internal":{"uuid":{"value":"83f8192d-6bbb-4c09-8166-c9f0f69f08f3"},"ext":null,"units_info":null},"max_reactive_power":0.2,"ext":{},"reactive_power":0.2},{"base_power":100.0,"services":[],"bus":{"value":"3a7c6bf7-e76d-4ade-afb4-05f0ff0cdddd"},"available":true,"name":"Adams","active_power":0.97,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.97,"internal":{"uuid":{"value":"8993ada8-1c51-49b3-9edc-a6699c3150b8"},"ext":null,"units_info":null},"max_reactive_power":0.2,"ext":{},"reactive_power":0.2},{"base_power":100.0,"services":[],"bus":{"value":"625ea2fd-5d08-4173-a8fc-f60800ef1533"},"available":true,"name":"Bajer","active_power":1.36,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.36,"internal":{"uuid":{"value":"b7cdad31-03f3-4053-9e8d-4de6c158891d"},"ext":null,"units_info":null},"max_reactive_power":0.28,"ext":{},"reactive_power":0.28},{"base_power":100.0,"services":[],"bus":{"value":"91784f04-9d48-4c0c-bc4b-76f1f9a1202c"},"available":true,"name":"Adler","active_power":1.8,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.8,"internal":{"uuid":{"value":"a91d2945-da47-4ce1-be9e-d0471cee33e9"},"ext":null,"units_info":null},"max_reactive_power":0.37,"ext":{},"reactive_power":0.37},{"base_power":100.0,"services":[],"bus":{"value":"d212c9d5-49d8-477e-91a2-a81f099d516f"},"available":true,"name":"Cabell","active_power":1.08,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.08,"internal":{"uuid":{"value":"ad11a1c5-0fa1-4bee-a9dd-6e58e306cd30"},"ext":null,"units_info":null},"max_reactive_power":0.22,"ext":{},"reactive_power":0.22},{"base_power":100.0,"services":[],"bus":{"value":"33b01702-9b2b-496d-a084-4e7d0285d1c1"},"available":true,"name":"Bailey","active_power":0.74,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.74,"internal":{"uuid":{"value":"421edf6d-7341-41ba-8158-582d2a766c30"},"ext":null,"units_info":null},"max_reactive_power":0.15,"ext":{},"reactive_power":0.15},{"base_power":100.0,"services":[],"bus":{"value":"c9e969ee-0360-47ac-bb9e-1fa7c9686021"},"available":true,"name":"Alder","active_power":1.25,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.25,"internal":{"uuid":{"value":"7da47684-41ae-47eb-b51c-48abb038aedb"},"ext":null,"units_info":null},"max_reactive_power":0.25,"ext":{},"reactive_power":0.25},{"base_power":100.0,"services":[],"bus":{"value":"db09deae-f668-417c-a5b7-689e9c36efc9"},"available":true,"name":"Allen","active_power":1.95,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.95,"internal":{"uuid":{"value":"ead6050f-23b7-44d5-9b0a-27dd10aea22e"},"ext":null,"units_info":null},"max_reactive_power":0.4,"ext":{},"reactive_power":0.4},{"base_power":100.0,"services":[],"bus":{"value":"367d6df0-b518-4034-8a6c-72492bd2b6bb"},"available":true,"name":"Barton","active_power":3.17,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":3.17,"internal":{"uuid":{"value":"04bfb562-f4b4-4c92-9ccf-8084ff792e22"},"ext":null,"units_info":null},"max_reactive_power":0.64,"ext":{},"reactive_power":0.64},{"base_power":100.0,"services":[],"bus":{"value":"69e48628-2660-454a-9085-48c99d863012"},"available":true,"name":"Bach","active_power":1.08,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.08,"internal":{"uuid":{"value":"9de4b618-bdf5-436c-b810-d04935e83c79"},"ext":null,"units_info":null},"max_reactive_power":0.22,"ext":{},"reactive_power":0.22},{"base_power":100.0,"services":[],"bus":{"value":"2313be90-da14-46fe-bbd7-54bd2efdd62f"},"available":true,"name":"Caesar","active_power":1.8,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.8,"internal":{"uuid":{"value":"5e120767-54db-4478-a9da-fda38d28392a"},"ext":null,"units_info":null},"max_reactive_power":0.37,"ext":{},"reactive_power":0.37},{"base_power":100.0,"services":[],"bus":{"value":"b06e629f-f96d-4376-8896-09f2b344fae6"},"available":true,"name":"Carew","active_power":1.25,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.25,"internal":{"uuid":{"value":"8a15509a-cf16-49c9-b183-60fdbd158cd2"},"ext":null,"units_info":null},"max_reactive_power":0.25,"ext":{},"reactive_power":0.25},{"base_power":100.0,"services":[],"bus":{"value":"3f89de57-ac01-4267-a82a-b069eac1ee24"},"available":true,"name":"Bain","active_power":0.71,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.71,"internal":{"uuid":{"value":"1ecb3dfa-ba28-4137-b7a2-162171d35b1a"},"ext":null,"units_info":null},"max_reactive_power":0.14,"ext":{},"reactive_power":0.14},{"base_power":100.0,"services":[],"bus":{"value":"60325cf0-2d69-4f44-ac2a-da4256fcb6cb"},"available":true,"name":"Chase","active_power":3.17,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":3.17,"internal":{"uuid":{"value":"c031b36d-9973-478e-81b3-8402a11d6ebc"},"ext":null,"units_info":null},"max_reactive_power":0.64,"ext":{},"reactive_power":0.64},{"base_power":100.0,"services":[],"bus":{"value":"78076c0b-9a17-4846-96ce-9334df1ab766"},"available":true,"name":"Carrel","active_power":1.71,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.71,"internal":{"uuid":{"value":"d55a7a0e-5f16-4ade-8460-b041676d5408"},"ext":null,"units_info":null},"max_reactive_power":0.35,"ext":{},"reactive_power":0.35},{"base_power":100.0,"services":[],"bus":{"value":"f36ee200-bdb0-4365-8742-9708bb98dc33"},"available":true,"name":"Ali","active_power":1.75,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.75,"internal":{"uuid":{"value":"825c76c2-4fa9-4363-9531-98b676079ae0"},"ext":null,"units_info":null},"max_reactive_power":0.36,"ext":{},"reactive_power":0.36},{"base_power":100.0,"services":[],"bus":{"value":"dc90fcb0-7507-41f5-a612-7868ad4fc22e"},"available":true,"name":"Caruso","active_power":1.95,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.95,"internal":{"uuid":{"value":"f672205d-3d9d-41fc-8a0b-b1257d3424d4"},"ext":null,"units_info":null},"max_reactive_power":0.4,"ext":{},"reactive_power":0.4},{"base_power":100.0,"services":[],"bus":{"value":"af6f1f63-b89c-4c78-8915-897f054405c3"},"available":true,"name":"Asser","active_power":1.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.0,"internal":{"uuid":{"value":"67651260-83dd-4853-aadc-34f76752a7a6"},"ext":null,"units_info":null},"max_reactive_power":0.2,"ext":{},"reactive_power":0.2},{"base_power":100.0,"services":[],"bus":{"value":"4bdd3592-4aae-4f6e-9d06-2f8a914f8291"},"available":true,"name":"Chifa","active_power":1.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.0,"internal":{"uuid":{"value":"bbb0adc3-5f44-4c9b-aebe-ddfd8bf0d5e9"},"ext":null,"units_info":null},"max_reactive_power":0.2,"ext":{},"reactive_power":0.2},{"base_power":100.0,"services":[],"bus":{"value":"56492fc8-f2bc-47d2-a91d-8ab5cf8ed0bf"},"available":true,"name":"Alger","active_power":1.71,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.71,"internal":{"uuid":{"value":"0a51a82d-123e-4f9f-92ff-56821234a153"},"ext":null,"units_info":null},"max_reactive_power":0.35,"ext":{},"reactive_power":0.35},{"base_power":100.0,"services":[],"bus":{"value":"89862d38-29d4-4d40-9c08-3b1254aae7fd"},"available":true,"name":"Agricola","active_power":0.74,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.74,"internal":{"uuid":{"value":"4c1143e2-59da-40c4-a608-d1353d5c0c61"},"ext":null,"units_info":null},"max_reactive_power":0.15,"ext":{},"reactive_power":0.15},{"base_power":100.0,"services":[],"bus":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"available":true,"name":"Astor","active_power":3.33,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":3.33,"internal":{"uuid":{"value":"bbc03083-268b-4428-a84a-5d9dac46b5f3"},"ext":null,"units_info":null},"max_reactive_power":0.68,"ext":{},"reactive_power":0.68},{"base_power":100.0,"services":[],"bus":{"value":"ce6baba1-0807-45fb-8cb7-9255686dc6b2"},"available":true,"name":"Aiken","active_power":0.71,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.71,"internal":{"uuid":{"value":"b0561165-25d0-4731-b345-9fb3d80dc63c"},"ext":null,"units_info":null},"max_reactive_power":0.14,"ext":{},"reactive_power":0.14},{"base_power":100.0,"services":[],"bus":{"value":"f9f77224-993f-49db-b8c2-6513bf9b832a"},"available":true,"name":"Clay","active_power":1.81,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.81,"internal":{"uuid":{"value":"a1402094-87de-462e-aa65-24c640e1027f"},"ext":null,"units_info":null},"max_reactive_power":0.37,"ext":{},"reactive_power":0.37},{"base_power":100.0,"services":[],"bus":{"value":"6c15bee4-23b2-4a02-8320-c17d12ea30ea"},"available":true,"name":"Barlow","active_power":2.65,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":2.65,"internal":{"uuid":{"value":"56f0ea9c-3269-49a6-8474-a786221a435d"},"ext":null,"units_info":null},"max_reactive_power":0.54,"ext":{},"reactive_power":0.54},{"base_power":100.0,"services":[],"bus":{"value":"91615274-0935-4bd1-983a-9a0397a25d92"},"available":true,"name":"Caine","active_power":0.74,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.74,"internal":{"uuid":{"value":"6aef213b-e24d-4c98-ad80-7569363116f3"},"ext":null,"units_info":null},"max_reactive_power":0.15,"ext":{},"reactive_power":0.15},{"base_power":100.0,"services":[],"bus":{"value":"4eb1ca69-9e90-4788-bc87-d254e148d3a2"},"available":true,"name":"Banks","active_power":1.95,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.95,"internal":{"uuid":{"value":"45bcfbe3-f04b-4798-afda-0e1ffaa2ce0c"},"ext":null,"units_info":null},"max_reactive_power":0.4,"ext":{},"reactive_power":0.4},{"base_power":100.0,"services":[],"bus":{"value":"7dc820fe-4fd9-40d7-a308-cc16f44c259a"},"available":true,"name":"Basov","active_power":1.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.0,"internal":{"uuid":{"value":"3d40652f-8b4a-46a7-8294-afca37171b33"},"ext":null,"units_info":null},"max_reactive_power":0.2,"ext":{},"reactive_power":0.2},{"base_power":100.0,"services":[],"bus":{"value":"6272599c-9e1f-44e6-8376-72121e8ac970"},"available":true,"name":"Balzac","active_power":1.75,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.75,"internal":{"uuid":{"value":"464090ff-23c3-4b27-8b0e-cf5f36820abd"},"ext":null,"units_info":null},"max_reactive_power":0.36,"ext":{},"reactive_power":0.36},{"base_power":100.0,"services":[],"bus":{"value":"72e004e0-797e-4f5a-ac27-b2e8631f8441"},"available":true,"name":"Camus","active_power":1.36,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.36,"internal":{"uuid":{"value":"ab4a132e-8c34-425b-b3f5-18aa23b443c0"},"ext":null,"units_info":null},"max_reactive_power":0.28,"ext":{},"reactive_power":0.28},{"base_power":100.0,"services":[],"bus":{"value":"221d393d-2d2e-44b4-b82c-68a1d6d8b58b"},"available":true,"name":"Chain","active_power":1.94,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.94,"internal":{"uuid":{"value":"aa731b0c-0e3e-4658-a625-34a0cbaa359a"},"ext":null,"units_info":null},"max_reactive_power":0.39,"ext":{},"reactive_power":0.39},{"base_power":100.0,"services":[],"bus":{"value":"1fbe0ef1-71c2-4941-b17a-7f7a4ed019bc"},"available":true,"name":"Alber","active_power":1.36,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.36,"internal":{"uuid":{"value":"3e304164-2a9e-4a9f-af04-e0affedbc14c"},"ext":null,"units_info":null},"max_reactive_power":0.28,"ext":{},"reactive_power":0.28},{"base_power":100.0,"services":[],"bus":{"value":"08a7f936-3c86-4d40-9344-674aad6a17c8"},"available":true,"name":"Clark","active_power":3.33,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":3.33,"internal":{"uuid":{"value":"ba842cf7-7400-429f-8cc7-16208a76a574"},"ext":null,"units_info":null},"max_reactive_power":0.68,"ext":{},"reactive_power":0.68},{"base_power":100.0,"services":[],"bus":{"value":"381ba93f-587c-4f1a-b630-80aa09339c47"},"available":true,"name":"Attar","active_power":1.81,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.81,"internal":{"uuid":{"value":"11e144b2-0d7a-411b-8006-5cb4d710b3d7"},"ext":null,"units_info":null},"max_reactive_power":0.37,"ext":{},"reactive_power":0.37},{"base_power":100.0,"services":[],"bus":{"value":"e17e4a10-16bd-4481-8aa5-1a228a65c33c"},"available":true,"name":"Arthur","active_power":3.17,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":3.17,"internal":{"uuid":{"value":"6ddbe7f2-a0c7-4d25-b0cb-081abe5545f6"},"ext":null,"units_info":null},"max_reactive_power":0.64,"ext":{},"reactive_power":0.64},{"base_power":100.0,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"Cecil","active_power":2.65,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":2.65,"internal":{"uuid":{"value":"a66b4e59-391a-45c1-b747-81f7f2d7bf0f"},"ext":null,"units_info":null},"max_reactive_power":0.54,"ext":{},"reactive_power":0.54},{"base_power":100.0,"services":[],"bus":{"value":"bbf94e94-d8d9-4c15-8696-edcb88dc80e0"},"available":true,"name":"Beethoven","active_power":1.28,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.28,"internal":{"uuid":{"value":"c49288ce-edf5-407f-89f2-73a7d814b340"},"ext":null,"units_info":null},"max_reactive_power":0.26,"ext":{},"reactive_power":0.26},{"base_power":100.0,"services":[],"bus":{"value":"fd4c192d-52b1-4ee2-9f83-99e99043cd6b"},"available":true,"name":"Attila","active_power":1.28,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.28,"internal":{"uuid":{"value":"ae82bb7f-04c5-48aa-b30f-588875ac1e35"},"ext":null,"units_info":null},"max_reactive_power":0.26,"ext":{},"reactive_power":0.26},{"base_power":100.0,"services":[],"bus":{"value":"5183e951-7348-4c03-b910-780387f676ab"},"available":true,"name":"Abel","active_power":1.08,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.08,"internal":{"uuid":{"value":"11ce2d16-f561-4a1b-b7cb-c6e2695ff4bf"},"ext":null,"units_info":null},"max_reactive_power":0.22,"ext":{},"reactive_power":0.22},{"base_power":100.0,"services":[],"bus":{"value":"2a086534-9378-412f-957e-b88d78cd804d"},"available":true,"name":"Balch","active_power":1.71,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.71,"internal":{"uuid":{"value":"1204f06a-9675-4b4b-9c83-ec2d273b3c7d"},"ext":null,"units_info":null},"max_reactive_power":0.35,"ext":{},"reactive_power":0.35},{"base_power":100.0,"services":[],"bus":{"value":"732dab8b-88e2-4c49-ad28-167a57826879"},"available":true,"name":"Carter","active_power":1.75,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.75,"internal":{"uuid":{"value":"ddd47cfd-d3f1-4019-96c0-981ba2d72677"},"ext":null,"units_info":null},"max_reactive_power":0.36,"ext":{},"reactive_power":0.36},{"base_power":100.0,"services":[],"bus":{"value":"f1fc491a-ec56-44ca-888c-2c7e45381334"},"available":true,"name":"Clive","active_power":1.28,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.28,"internal":{"uuid":{"value":"19bfe377-5390-487e-8e7f-eb542533c4cf"},"ext":null,"units_info":null},"max_reactive_power":0.26,"ext":{},"reactive_power":0.26},{"base_power":100.0,"services":[],"bus":{"value":"350eb0fa-6267-4500-a8d6-9077d0d933bd"},"available":true,"name":"Calvin","active_power":0.71,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.71,"internal":{"uuid":{"value":"7ac2d9de-735b-4b15-bccf-4b9b54338bee"},"ext":null,"units_info":null},"max_reactive_power":0.14,"ext":{},"reactive_power":0.14},{"base_power":100.0,"services":[],"bus":{"value":"e69f0ad5-e088-4fac-bb71-4f86c244f8f6"},"available":true,"name":"Cabot","active_power":0.97,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.97,"internal":{"uuid":{"value":"856faaf7-51c5-4a76-b3c6-6794c02d512c"},"ext":null,"units_info":null},"max_reactive_power":0.2,"ext":{},"reactive_power":0.2},{"base_power":100.0,"services":[],"bus":{"value":"f25908f6-24b3-48e8-aba9-cbb605169c48"},"available":true,"name":"Bayle","active_power":3.33,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":3.33,"internal":{"uuid":{"value":"303684db-f610-4c6b-8c93-8901d198b89a"},"ext":null,"units_info":null},"max_reactive_power":0.68,"ext":{},"reactive_power":0.68},{"base_power":100.0,"services":[],"bus":{"value":"958448d3-d1ac-4d89-a7f8-04053fd8dbf7"},"available":true,"name":"Bede","active_power":1.81,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.81,"internal":{"uuid":{"value":"a5193583-6220-4d72-8982-da4d8bc80725"},"ext":null,"units_info":null},"max_reactive_power":0.37,"ext":{},"reactive_power":0.37},{"base_power":100.0,"services":[],"bus":{"value":"306ed745-ef31-4c2a-b8c3-191cfe87042b"},"available":true,"name":"Arnold","active_power":1.94,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.94,"internal":{"uuid":{"value":"f682077a-b3e2-4680-86d6-5ab61f4319e4"},"ext":null,"units_info":null},"max_reactive_power":0.39,"ext":{},"reactive_power":0.39},{"base_power":100.0,"services":[],"bus":{"value":"6dbcc15e-3d14-4dcc-9c96-e1f0691d1168"},"available":true,"name":"Baker","active_power":1.25,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.25,"internal":{"uuid":{"value":"79d667fa-3931-4da6-8a64-78e32d09f4a0"},"ext":null,"units_info":null},"max_reactive_power":0.25,"ext":{},"reactive_power":0.25},{"base_power":100.0,"services":[],"bus":{"value":"cdbd78c0-e3d9-4055-921b-49d9fa8af4f0"},"available":true,"name":"Barry","active_power":1.94,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.94,"internal":{"uuid":{"value":"0d7d1a27-d8b9-48af-85bd-dde1dc69175e"},"ext":null,"units_info":null},"max_reactive_power":0.39,"ext":{},"reactive_power":0.39},{"base_power":100.0,"services":[],"bus":{"value":"acebae3e-4686-4d49-80a4-f723fdcf422f"},"available":true,"name":"Arne","active_power":2.65,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":2.65,"internal":{"uuid":{"value":"71a383fc-04bf-41d9-82ad-0bdc07b6761a"},"ext":null,"units_info":null},"max_reactive_power":0.54,"ext":{},"reactive_power":0.54},{"base_power":100.0,"services":[],"bus":{"value":"7e1d78ef-4352-4fab-9a0c-8119d5844781"},"available":true,"name":"Baffin","active_power":1.8,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.8,"internal":{"uuid":{"value":"4b43a647-e294-4c53-a51e-e1e33509dc13"},"ext":null,"units_info":null},"max_reactive_power":0.37,"ext":{},"reactive_power":0.37},{"number":202,"base_voltage":138.0,"bustype":"PV","angle":-0.1877810214196211,"name":"Bacon","magnitude":1.04844,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"d702b325-6ec5-4597-b462-c1ce5f8c1578"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"15ebff22-54a0-4376-bdff-d38ace7ada80"}},{"number":321,"base_voltage":230.0,"bustype":"PV","angle":0.21539492271297458,"name":"Cobb","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"042bf3e4-a488-4274-b72c-217eb47ad92f"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"967bad7e-84d8-4326-98c5-2999e21134d1"}},{"number":322,"base_voltage":230.0,"bustype":"PV","angle":0.3153659860038082,"name":"Cole","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"d6c82dd3-53e3-4ae4-a6db-4718bb150adc"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"967bad7e-84d8-4326-98c5-2999e21134d1"}},{"number":102,"base_voltage":138.0,"bustype":"PV","angle":-0.1364470483941135,"name":"Adams","magnitude":1.04783,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"3a7c6bf7-e76d-4ade-afb4-05f0ff0cdddd"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"d1d57ffe-89b3-451d-97e0-a553edacc846"}},{"number":117,"base_voltage":230.0,"bustype":"PQ","angle":0.19956391373276003,"name":"Aston","magnitude":1.04783,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"ab9edaa7-4310-46a2-8ce0-de9f84c54995"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"219a5c3c-0d13-4d9e-87b1-d310d381bbfe"}},{"number":324,"base_voltage":230.0,"bustype":"PQ","angle":0.02279504722859714,"name":"Curie","magnitude":1.01046,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"d1f7a145-8763-4cdf-b499-03b2e6c042ee"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"48cb8968-c9b8-4cf1-94a4-a5011c81620d"}},{"number":121,"base_voltage":230.0,"bustype":"PV","angle":0.22840303616101354,"name":"Attlee","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"cc3f8b48-f40e-41de-b5df-9c0542019d0f"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"219a5c3c-0d13-4d9e-87b1-d310d381bbfe"}},{"number":206,"base_voltage":138.0,"bustype":"PQ","angle":-0.28198796032281825,"name":"Bajer","magnitude":1.03259,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"625ea2fd-5d08-4173-a8fc-f60800ef1533"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"15ebff22-54a0-4376-bdff-d38ace7ada80"}},{"number":217,"base_voltage":230.0,"bustype":"PQ","angle":0.15390994022494278,"name":"Bates","magnitude":1.04847,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"c207d005-44a7-41a5-bb98-aca4f1f6bee9"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"2ef138e1-3a05-4325-b22f-53313296cfa3"}},{"number":103,"base_voltage":138.0,"bustype":"PQ","angle":-0.1258539470320591,"name":"Adler","magnitude":1.01085,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"91784f04-9d48-4c0c-bc4b-76f1f9a1202c"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"24e29287-bbe2-4650-b6aa-26674a11bb44"}},{"number":301,"base_voltage":138.0,"bustype":"PV","angle":-0.1631570436678591,"name":"Cabell","magnitude":1.0486,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"d212c9d5-49d8-477e-91a2-a81f099d516f"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"47f21ba4-b653-4677-9704-a4dd63c9e9a9"}},{"number":204,"base_voltage":138.0,"bustype":"PQ","angle":-0.23535398444000616,"name":"Bailey","magnitude":1.0189,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"33b01702-9b2b-496d-a084-4e7d0285d1c1"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"35afa8f3-0ef5-45ce-ba22-0e6ad2bc7a28"}},{"number":107,"base_voltage":138.0,"bustype":"PV","angle":-0.19681606735842017,"name":"Alder","magnitude":1.03745,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"c9e969ee-0360-47ac-bb9e-1fa7c9686021"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"d1d57ffe-89b3-451d-97e0-a553edacc846"}},{"number":311,"base_voltage":230.0,"bustype":"PQ","angle":-0.10019394183631328,"name":"Cary","magnitude":1.0283,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"6f3bc9ff-1c1d-4b15-ae3a-1347c1feb75b"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"b78629ef-7b74-460f-a4be-52633510eee2"}},{"number":110,"base_voltage":138.0,"bustype":"PQ","angle":-0.18536496213608536,"name":"Allen","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"db09deae-f668-417c-a5b7-689e9c36efc9"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"54186d4e-4d58-46d7-ac8d-ed9fc108a994"}},{"number":317,"base_voltage":230.0,"bustype":"PQ","angle":0.18053999941894702,"name":"Chuhsi","magnitude":1.04785,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"5febc718-ae81-4978-aa2c-b2dce9b8d1e5"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"967bad7e-84d8-4326-98c5-2999e21134d1"}},{"number":215,"base_voltage":230.0,"bustype":"PV","angle":0.08087000542408246,"name":"Barton","magnitude":1.04327,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"367d6df0-b518-4034-8a6c-72492bd2b6bb"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"fcdaf0ad-1721-4b98-a4e1-b925350a054e"}},{"number":323,"base_voltage":230.0,"bustype":"PV","angle":0.15046692920953353,"name":"Comte","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"917d920b-6e3f-4fc5-9eeb-daf48c7df2b3"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"d9dd8fb5-1430-443b-810a-3c38a8bf937b"}},{"number":201,"base_voltage":138.0,"bustype":"PV","angle":-0.18657098464921346,"name":"Bach","magnitude":1.04841,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"69e48628-2660-454a-9085-48c99d863012"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"35afa8f3-0ef5-45ce-ba22-0e6ad2bc7a28"}},{"number":303,"base_voltage":138.0,"bustype":"PQ","angle":-0.14969497008137647,"name":"Caesar","magnitude":1.01045,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"2313be90-da14-46fe-bbd7-54bd2efdd62f"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"47f21ba4-b653-4677-9704-a4dd63c9e9a9"}},{"number":307,"base_voltage":138.0,"bustype":"PV","angle":-0.21900304187562247,"name":"Carew","magnitude":1.03804,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"b06e629f-f96d-4376-8896-09f2b344fae6"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"997ec446-ed79-4438-b2bc-7854f3f88e4d"}},{"number":205,"base_voltage":138.0,"bustype":"PQ","angle":-0.23757194885344055,"name":"Bain","magnitude":1.03603,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"3f89de57-ac01-4267-a82a-b069eac1ee24"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"35afa8f3-0ef5-45ce-ba22-0e6ad2bc7a28"}},{"number":315,"base_voltage":230.0,"bustype":"PV","angle":0.12306107116301779,"name":"Chase","magnitude":1.043,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"60325cf0-2d69-4f44-ac2a-da4256fcb6cb"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"48cb8968-c9b8-4cf1-94a4-a5011c81620d"}},{"number":222,"base_voltage":230.0,"bustype":"PV","angle":0.28679302628648384,"name":"Bell","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"e29b3c74-33b5-4eec-8836-85b35666c0ff"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"2ef138e1-3a05-4325-b22f-53313296cfa3"}},{"number":308,"base_voltage":138.0,"bustype":"PQ","angle":-0.26499107140227146,"name":"Carrel","magnitude":1.01056,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"78076c0b-9a17-4846-96ce-9334df1ab766"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"997ec446-ed79-4438-b2bc-7854f3f88e4d"}},{"number":109,"base_voltage":138.0,"bustype":"PQ","angle":-0.15385496235350493,"name":"Ali","magnitude":1.0261,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"f36ee200-bdb0-4365-8742-9708bb98dc33"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"54186d4e-4d58-46d7-ac8d-ed9fc108a994"}},{"number":310,"base_voltage":138.0,"bustype":"PQ","angle":-0.2146959183475509,"name":"Caruso","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"dc90fcb0-7507-41f5-a612-7868ad4fc22e"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"b78629ef-7b74-460f-a4be-52633510eee2"}},{"number":124,"base_voltage":230.0,"bustype":"PQ","angle":0.04159800285910765,"name":"Avery","magnitude":1.01155,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"33d5602a-9329-40d6-8ad5-111041585ca4"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"514ed6af-1bc8-43d4-b706-7e4a19fcfa21"}},{"number":116,"base_voltage":230.0,"bustype":"PV","angle":0.13210903253828157,"name":"Asser","magnitude":1.04565,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"af6f1f63-b89c-4c78-8915-897f054405c3"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"514ed6af-1bc8-43d4-b706-7e4a19fcfa21"}},{"number":122,"base_voltage":230.0,"bustype":"PV","angle":0.33073605352857105,"name":"Aubrey","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"3c3c7143-9a74-49a1-b26d-436bc9ec1b67"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"219a5c3c-0d13-4d9e-87b1-d310d381bbfe"}},{"number":211,"base_voltage":230.0,"bustype":"PQ","angle":-0.12100996022607405,"name":"Bardeen","magnitude":1.02735,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"f2d4f823-b85a-4c3f-a257-6bb599027788"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"b03bd1ac-1a3b-4e1a-bf36-45522d371140"}},{"number":316,"base_voltage":230.0,"bustype":"PV","angle":0.11516991401597582,"name":"Chifa","magnitude":1.04558,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"4bdd3592-4aae-4f6e-9d06-2f8a914f8291"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"48cb8968-c9b8-4cf1-94a4-a5011c81620d"}},{"number":108,"base_voltage":138.0,"bustype":"PQ","angle":-0.23997701256268875,"name":"Alger","magnitude":1.01024,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"56492fc8-f2bc-47d2-a91d-8ab5cf8ed0bf"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"d1d57ffe-89b3-451d-97e0-a553edacc846"}},{"number":223,"base_voltage":230.0,"bustype":"PV","angle":0.125340994764898,"name":"Bloch","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"c5c6a506-2509-4f9b-9049-f470b31f021a"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a922f6b4-18d5-4dad-ab7b-9b257be9e657"}},{"number":104,"base_voltage":138.0,"bustype":"PQ","angle":-0.18441393222667365,"name":"Agricola","magnitude":1.01765,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"89862d38-29d4-4d40-9c08-3b1254aae7fd"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"24e29287-bbe2-4650-b6aa-26674a11bb44"}},{"number":118,"base_voltage":230.0,"bustype":"PV","angle":0.21859498389650622,"name":"Astor","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"219a5c3c-0d13-4d9e-87b1-d310d381bbfe"}},{"number":105,"base_voltage":138.0,"bustype":"PQ","angle":-0.18690504066804514,"name":"Aiken","magnitude":1.03568,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"ce6baba1-0807-45fb-8cb7-9255686dc6b2"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"24e29287-bbe2-4650-b6aa-26674a11bb44"}},{"number":319,"base_voltage":230.0,"bustype":"PQ","angle":0.10324303203954738,"name":"Clay","magnitude":1.03953,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"f9f77224-993f-49db-b8c2-6513bf9b832a"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"d9dd8fb5-1430-443b-810a-3c38a8bf937b"}},{"number":213,"base_voltage":230.0,"bustype":"PV","angle":-0.05611408078086969,"name":"Barlow","magnitude":1.03752,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"6c15bee4-23b2-4a02-8320-c17d12ea30ea"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"d5de3f3b-b880-4913-9d8f-f331f3cf2a8a"}},{"number":304,"base_voltage":138.0,"bustype":"PQ","angle":-0.21271793670626568,"name":"Caine","magnitude":1.01785,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"91615274-0935-4bd1-983a-9a0397a25d92"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"47f21ba4-b653-4677-9704-a4dd63c9e9a9"}},{"number":224,"base_voltage":230.0,"bustype":"PQ","angle":-0.01675603348377156,"name":"Bordet","magnitude":1.01456,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"d0e5efa9-6aba-441c-859d-ab21f80bd931"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"fcdaf0ad-1721-4b98-a4e1-b925350a054e"}},{"number":210,"base_voltage":138.0,"bustype":"PQ","angle":-0.23526793970788284,"name":"Banks","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"4eb1ca69-9e90-4788-bc87-d254e148d3a2"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"b03bd1ac-1a3b-4e1a-bf36-45522d371140"}},{"number":325,"base_voltage":230.0,"bustype":"PQ","angle":0.15696304468545644,"name":"Curtiss","magnitude":1.04986,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"2d433ab6-bf62-4ea7-b9ab-5e15d02c52e3"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"d9dd8fb5-1430-443b-810a-3c38a8bf937b"}},{"number":216,"base_voltage":230.0,"bustype":"PV","angle":0.0820320456400603,"name":"Basov","magnitude":1.04556,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"7dc820fe-4fd9-40d7-a308-cc16f44c259a"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"fcdaf0ad-1721-4b98-a4e1-b925350a054e"}},{"number":209,"base_voltage":138.0,"bustype":"PQ","angle":-0.204623972300142,"name":"Balzac","magnitude":1.02781,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"6272599c-9e1f-44e6-8376-72121e8ac970"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"b03bd1ac-1a3b-4e1a-bf36-45522d371140"}},{"number":306,"base_voltage":138.0,"bustype":"PQ","angle":-0.26078796949761873,"name":"Camus","magnitude":1.0326,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"72e004e0-797e-4f5a-ac27-b2e8631f8441"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"997ec446-ed79-4438-b2bc-7854f3f88e4d"}},{"number":314,"base_voltage":230.0,"bustype":"PV","angle":-0.0559889406735017,"name":"Chain","magnitude":1.04631,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"221d393d-2d2e-44b4-b82c-68a1d6d8b58b"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"48cb8968-c9b8-4cf1-94a4-a5011c81620d"}},{"number":312,"base_voltage":230.0,"bustype":"PQ","angle":-0.0723620489193857,"name":"Caxton","magnitude":1.019,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"5e67fd81-10ae-4a2e-860a-da7c82a49336"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"b78629ef-7b74-460f-a4be-52633510eee2"}},{"number":106,"base_voltage":138.0,"bustype":"PQ","angle":-0.23176995082103577,"name":"Alber","magnitude":1.03242,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"1fbe0ef1-71c2-4941-b17a-7f7a4ed019bc"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"d1d57ffe-89b3-451d-97e0-a553edacc846"}},{"number":318,"base_voltage":230.0,"bustype":"PV","angle":0.19796606480255924,"name":"Clark","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"08a7f936-3c86-4d40-9344-674aad6a17c8"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"967bad7e-84d8-4326-98c5-2999e21134d1"}},{"number":119,"base_voltage":230.0,"bustype":"PQ","angle":0.11620000734050288,"name":"Attar","magnitude":1.03962,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"381ba93f-587c-4f1a-b630-80aa09339c47"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"5c5aa2a0-95ff-4057-94e9-65834c7f128b"}},{"number":111,"base_voltage":230.0,"bustype":"PQ","angle":-0.0683600089445627,"name":"Anna","magnitude":1.02764,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"303d3153-2035-4054-85e5-97f3c5334cae"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"54186d4e-4d58-46d7-ac8d-ed9fc108a994"}},{"number":115,"base_voltage":230.0,"bustype":"PV","angle":0.13892297247099264,"name":"Arthur","magnitude":1.04335,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"e17e4a10-16bd-4481-8aa5-1a228a65c33c"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"514ed6af-1bc8-43d4-b706-7e4a19fcfa21"}},{"number":313,"base_voltage":230.0,"bustype":"PV","angle":-0.04215197036369065,"name":"Cecil","magnitude":1.03802,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"765835a0-9371-4b70-835f-584516769222"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"b18279c8-0ab5-410f-ab5f-e68ea3ecc283"}},{"number":220,"base_voltage":230.0,"bustype":"PQ","angle":0.09886400094629359,"name":"Beethoven","magnitude":1.0438,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"bbf94e94-d8d9-4c15-8696-edcb88dc80e0"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a922f6b4-18d5-4dad-ab7b-9b257be9e657"}},{"number":123,"base_voltage":230.0,"bustype":"PV","angle":0.15805998412033487,"name":"Austen","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"6fed2a6f-d989-4b2e-b5dd-ca2b75bb058d"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"5c5aa2a0-95ff-4057-94e9-65834c7f128b"}},{"number":120,"base_voltage":230.0,"bustype":"PQ","angle":0.13509895607987307,"name":"Attila","magnitude":1.04399,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"fd4c192d-52b1-4ee2-9f83-99e99043cd6b"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"5c5aa2a0-95ff-4057-94e9-65834c7f128b"}},{"number":101,"base_voltage":138.0,"bustype":"PV","angle":-0.13511501310899143,"name":"Abel","magnitude":1.04777,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"5183e951-7348-4c03-b910-780387f676ab"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"24e29287-bbe2-4650-b6aa-26674a11bb44"}},{"number":208,"base_voltage":138.0,"bustype":"PQ","angle":-0.2831550619936269,"name":"Balch","magnitude":1.01203,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"2a086534-9378-412f-957e-b88d78cd804d"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"15ebff22-54a0-4376-bdff-d38ace7ada80"}},{"number":309,"base_voltage":138.0,"bustype":"PQ","angle":-0.18232006072305607,"name":"Carter","magnitude":1.02579,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"732dab8b-88e2-4c49-ad28-167a57826879"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"b78629ef-7b74-460f-a4be-52633510eee2"}},{"number":320,"base_voltage":230.0,"bustype":"PQ","angle":0.1256129170623587,"name":"Clive","magnitude":1.04389,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"f1fc491a-ec56-44ca-888c-2c7e45381334"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"d9dd8fb5-1430-443b-810a-3c38a8bf937b"}},{"number":221,"base_voltage":230.0,"bustype":"PV","angle":0.1855649768683639,"name":"Behring","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"1fd0fcca-560c-432c-8f56-c0e78e190a93"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"2ef138e1-3a05-4325-b22f-53313296cfa3"}},{"number":305,"base_voltage":138.0,"bustype":"PQ","angle":-0.2155490352859257,"name":"Calvin","magnitude":1.03609,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"350eb0fa-6267-4500-a8d6-9077d0d933bd"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"47f21ba4-b653-4677-9704-a4dd63c9e9a9"}},{"number":302,"base_voltage":138.0,"bustype":"PV","angle":-0.1646020017555852,"name":"Cabot","magnitude":1.04864,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"e69f0ad5-e088-4fac-bb71-4f86c244f8f6"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"997ec446-ed79-4438-b2bc-7854f3f88e4d"}},{"number":218,"base_voltage":230.0,"bustype":"PV","angle":0.17444094634785287,"name":"Bayle","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"f25908f6-24b3-48e8-aba9-cbb605169c48"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"2ef138e1-3a05-4325-b22f-53313296cfa3"}},{"number":219,"base_voltage":230.0,"bustype":"PQ","angle":0.07351902768053274,"name":"Bede","magnitude":1.03946,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"958448d3-d1ac-4d89-a7f8-04053fd8dbf7"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a922f6b4-18d5-4dad-ab7b-9b257be9e657"}},{"number":114,"base_voltage":230.0,"bustype":"PV","angle":-0.03020396990331307,"name":"Arnold","magnitude":1.04401,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"306ed745-ef31-4c2a-b8c3-191cfe87042b"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"514ed6af-1bc8-43d4-b706-7e4a19fcfa21"}},{"number":207,"base_voltage":138.0,"bustype":"PV","angle":-0.23502708427110763,"name":"Baker","magnitude":1.03973,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"6dbcc15e-3d14-4dcc-9c96-e1f0691d1168"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"15ebff22-54a0-4376-bdff-d38ace7ada80"}},{"number":214,"base_voltage":230.0,"bustype":"PV","angle":-0.08177199158151313,"name":"Barry","magnitude":1.04335,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"cdbd78c0-e3d9-4055-921b-49d9fa8af4f0"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"fcdaf0ad-1721-4b98-a4e1-b925350a054e"}},{"number":212,"base_voltage":230.0,"bustype":"PQ","angle":-0.09168807972671891,"name":"Barkla","magnitude":1.01921,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"09017d78-0bae-4de6-9552-5939cf43837e"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"b03bd1ac-1a3b-4e1a-bf36-45522d371140"}},{"number":113,"base_voltage":230.0,"bustype":"REF","angle":0.0,"name":"Arne","magnitude":1.03943,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"acebae3e-4686-4d49-80a4-f723fdcf422f"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"ee35d163-6423-4848-80cd-9bb435b23343"}},{"number":203,"base_voltage":138.0,"bustype":"PQ","angle":-0.18281503609892163,"name":"Baffin","magnitude":1.01886,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"7e1d78ef-4352-4fab-9a0c-8119d5844781"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"35afa8f3-0ef5-45ce-ba22-0e6ad2bc7a28"}},{"number":112,"base_voltage":230.0,"bustype":"PQ","angle":-0.042310969858547334,"name":"Archer","magnitude":1.02024,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"a8cc8bce-df7e-4a2e-ab6d-978c8ead4faa"},"ext":null,"units_info":null},"area":{"value":"5029982f-0b58-4cd4-9738-92dca584ebbf"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"54186d4e-4d58-46d7-ac8d-ed9fc108a994"}},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"d6c82dd3-53e3-4ae4-a6db-4718bb150adc"},"available":true,"name":"322_CT_6","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"daa85915-064a-4ced-8e60-17ff08a33fc9"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":265408.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6003.0,6817.0,7176.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":-0.15203125},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"042bf3e4-a488-4274-b72c-217eb47ad92f"},"available":true,"name":"321_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"5dba86f7-1f8d-4ac7-8a2a-fd948c4679b9"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.228589998879815e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[5848.0,6665.0,8733.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":-0.008067632850241546},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"d702b325-6ec5-4597-b462-c1ce5f8c1578"},"available":true,"name":"202_STEAM_3","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"16d9a2d3-9777-4202-b085-a4aa89dbcb3b"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":355379.999905232,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[9989.0,10070.0,12902.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":0.022584269662921347},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"c5c6a506-2509-4f9b-9049-f470b31f021a"},"available":true,"name":"223_CT_4","status":true,"active_power":0.34375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"2b6c181d-6070-4300-bc59-955ad511fc08"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":435468.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[9595.0,10225.0,10676.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.00375},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"6fed2a6f-d989-4b2e-b5dd-ca2b75bb058d"},"available":true,"name":"123_STEAM_2","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"858223cb-fdd1-46ed-8071-e06107db869f"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":679954.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[9191.0,10865.0,15627.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":-0.028516483516483518},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"6c15bee4-23b2-4a02-8320-c17d12ea30ea"},"available":true,"name":"213_CT_1","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"3feb9c79-8ac6-4ff3-9a6c-5edc7fadc1f0"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":288750.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6899.0,7602.0,7797.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.14421875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"c5c6a506-2509-4f9b-9049-f470b31f021a"},"available":true,"name":"223_CT_6","status":true,"active_power":0.34375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"6f9f2291-85fc-4469-a18b-3a7bc4ebbb36"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":435468.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[9595.0,10225.0,10676.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.00375},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"b87759ba-4c04-45e1-9739-b87060efe507"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.34877999877023e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[4047.0,6883.0,8683.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.36231884057971014},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"5183e951-7348-4c03-b910-780387f676ab"},"available":true,"name":"101_STEAM_3","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"5b3ce94b-26bf-49f7-b58f-8ec17e6ec00c"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":398099.99989384,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[6713.0,8028.0,8549.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":0.0015730337078651688},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"6fed2a6f-d989-4b2e-b5dd-ca2b75bb058d"},"available":true,"name":"123_CT_1","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"bf164bee-1e43-447a-b905-5c1619fde035"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":279950.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6757.0,7667.0,7998.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.0096875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"acebae3e-4686-4d49-80a4-f723fdcf422f"},"available":true,"name":"113_CT_3","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"a9a008dc-2538-4d62-a366-ce253266c976"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":288750.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6899.0,7602.0,7797.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"e69f0ad5-e088-4fac-bb71-4f86c244f8f6"},"available":true,"name":"302_CT_3","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"c2d210b7-b23c-460f-8ede-7218d8112673"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":338690.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[8693.0,9874.0,9939.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.17171875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"367d6df0-b518-4034-8a6c-72492bd2b6bb"},"available":true,"name":"215_CT_4","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"fe6d0bfa-4b76-463a-a9d1-c7e9e5d0bd08"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":313038.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6668.0,6987.0,8421.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"3a7c6bf7-e76d-4ade-afb4-05f0ff0cdddd"},"available":true,"name":"102_STEAM_3","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"c1f96aff-b09e-4b30-87c6-c4466ce4a212"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":347729.999907272,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[8734.0,9861.0,10651.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":-0.025955056179775282},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"d212c9d5-49d8-477e-91a2-a81f099d516f"},"available":true,"name":"301_CT_4","status":true,"active_power":0.6875,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"34dfc0e5-d393-4e13-9d4f-5de2f0808459"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":287980.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[7324.0,7534.0,11253.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.25828125},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"acebae3e-4686-4d49-80a4-f723fdcf422f"},"available":true,"name":"113_CT_2","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"23286b45-f4c7-408e-8676-5784d267542f"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":288750.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6899.0,7602.0,7797.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"1fd0fcca-560c-432c-8f56-c0e78e190a93"},"available":true,"name":"221_CC_1","status":true,"active_power":0.7173188405797102,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"ff7d55ae-3c9d-4812-9048-cce2a072b657"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.170789998932515e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[5950.0,6772.0,9293.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":-0.01816425120772947},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"c5c6a506-2509-4f9b-9049-f470b31f021a"},"available":true,"name":"223_CT_5","status":true,"active_power":0.34375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"1959a7bf-0749-4265-9d0f-1676a1442766"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":435468.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[9595.0,10225.0,10676.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.00375},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"60325cf0-2d69-4f44-ac2a-da4256fcb6cb"},"available":true,"name":"315_CT_7","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"7534add6-aaa2-4ed6-b3df-5949faec3952"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":227524.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6792.0,6919.0,8195.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"367d6df0-b518-4034-8a6c-72492bd2b6bb"},"available":true,"name":"215_CT_5","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"c44b1bc0-6384-4c76-adf3-80217aab3263"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":313038.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6668.0,6987.0,8421.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"917d920b-6e3f-4fc5-9eeb-daf48c7df2b3"},"available":true,"name":"323_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"d1c17fe2-c98f-4114-b5e6-7ecb3e302b4b"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.254769998855945e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[6799.0,7789.0,8162.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.0903623188405797},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"5183e951-7348-4c03-b910-780387f676ab"},"available":true,"name":"101_STEAM_4","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"ee7b98ec-5afc-45c8-a5d1-10ae323c6e21"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":398099.99989384,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[6713.0,8028.0,8549.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":0.0015730337078651688},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"acebae3e-4686-4d49-80a4-f723fdcf422f"},"available":true,"name":"113_CT_1","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"44fbeda1-5880-4af7-8f5a-086f0e50bd7b"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":288750.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6899.0,7602.0,7797.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":412.0,"prime_mover_type":"ST","rating":0.9242443089640665,"services":[],"bus":{"value":"c5c6a506-2509-4f9b-9049-f470b31f021a"},"available":true,"name":"223_STEAM_3","status":true,"active_power":0.8495145631067961,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"af29bc5d-3403-43fe-ab29-3471190aa400"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06067961165048544,"max":0.3640776699029126},"ext":{},"operation_cost":{"start_up":36749.81355899999,"fixed":0.0,"shut_down":18374.906779499994,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":1.57206e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[140.0,210.0,280.0,350.0],"y_coords":[8922.0,10913.0,11645.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":24.0,"down":48.0},"must_run":false,"ramp_limits":{"up":0.00024271844660194176,"down":0.00024271844660194176},"time_at_status":10000.0,"active_power_limits":{"min":0.33980582524271846,"max":0.8495145631067961},"reactive_power":0.04997572815533981},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"08a7f936-3c86-4d40-9344-674aad6a17c8"},"available":true,"name":"318_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"294065a8-201b-4fa3-a7ec-8564f0d20463"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.35183999876744e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[6906.0,7017.0,8111.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.15246376811594203},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"b06e629f-f96d-4376-8896-09f2b344fae6"},"available":true,"name":"307_CT_2","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"bff0011e-9552-4870-ae02-ceb9d25be7b8"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":293766.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[7176.0,7517.0,9126.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"6c15bee4-23b2-4a02-8320-c17d12ea30ea"},"available":true,"name":"213_CT_2","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"53a3fdb8-3860-4496-99d5-063aa745dc2f"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":288750.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6899.0,7602.0,7797.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.14421875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"acebae3e-4686-4d49-80a4-f723fdcf422f"},"available":true,"name":"113_CT_4","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"b4f98f5d-4f9b-4fa8-a808-874f35bcc4e9"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":288750.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6899.0,7602.0,7797.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"available":true,"name":"118_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"c4edad42-5837-42d5-be50-9db3f980e2b4"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.233689998875165e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[5808.0,7140.0,8351.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.1652898550724638},{"base_power":64.0,"prime_mover_type":"CT","rating":1.2717828590702895,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"60325cf0-2d69-4f44-ac2a-da4256fcb6cb"},"available":true,"name":"315_CT_8","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"4c8a3784-f78a-4881-8bb3-76bcfe430650"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.9375},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":227524.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6792.0,6919.0,8195.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.9375},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"f25908f6-24b3-48e8-aba9-cbb605169c48"},"available":true,"name":"218_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"45c750f9-dd14-4966-ad24-66135b4cb18c"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.9354499982353249e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[5388.0,5575.0,7658.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.14565217391304347},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"6c15bee4-23b2-4a02-8320-c17d12ea30ea"},"available":true,"name":"213_CC_3","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"f4c6e701-174b-4c4b-8138-0e2ff311f18e"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.33007999878728e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[6334.0,6979.0,8749.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.3280193236714976},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"e17e4a10-16bd-4481-8aa5-1a228a65c33c"},"available":true,"name":"115_STEAM_3","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"6f06c33e-c21f-4573-b7b5-e83a0e300d20"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":709652.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[9650.0,10640.0,12796.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":0.43956043956043955},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"917d920b-6e3f-4fc5-9eeb-daf48c7df2b3"},"available":true,"name":"323_CC_2","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"bde326ce-ad27-4f3a-9575-fe627a5e9316"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.254769998855945e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[6799.0,7789.0,8162.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.0903623188405797},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"d6c82dd3-53e3-4ae4-a6db-4718bb150adc"},"available":true,"name":"322_CT_5","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"87c11341-9673-42cd-9b36-6fb5ffe826b9"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":265408.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6003.0,6817.0,7176.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":-0.15203125},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"6dbcc15e-3d14-4dcc-9c96-e1f0691d1168"},"available":true,"name":"207_CT_2","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"d6ecdf5c-1743-4376-83df-7621e222e930"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":287122.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[8804.0,9481.0,10955.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":412.0,"prime_mover_type":"ST","rating":0.9242443089640665,"services":[],"bus":{"value":"6fed2a6f-d989-4b2e-b5dd-ca2b75bb058d"},"available":true,"name":"123_STEAM_3","status":true,"active_power":0.8495145631067961,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"ee16cd4a-917a-458c-bc96-5b4343d11097"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06067961165048544,"max":0.3640776699029126},"ext":{},"operation_cost":{"start_up":36749.81355899999,"fixed":0.0,"shut_down":18374.906779499994,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":1.69484e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[140.0,210.0,280.0,350.0],"y_coords":[9453.0,10240.0,11087.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":24.0,"down":48.0},"must_run":false,"ramp_limits":{"up":0.00024271844660194176,"down":0.00024271844660194176},"time_at_status":10000.0,"active_power_limits":{"min":0.33980582524271846,"max":0.8495145631067961},"reactive_power":0.06895631067961165},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"c5c6a506-2509-4f9b-9049-f470b31f021a"},"available":true,"name":"223_STEAM_1","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"b1dad422-a9c9-4d8a-9bed-82f7d85e70b1"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":673134.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[9004.0,9314.0,9659.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":-0.05664835164835165},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"6fed2a6f-d989-4b2e-b5dd-ca2b75bb058d"},"available":true,"name":"123_CT_5","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"c085fc55-7cb7-4d02-b3af-af5f7c105006"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":279950.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6757.0,7667.0,7998.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.0096875},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"c5c6a506-2509-4f9b-9049-f470b31f021a"},"available":true,"name":"223_STEAM_2","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"0f37c2af-ccd4-4662-a95d-8a99b5477d5a"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":673134.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[9004.0,9314.0,9659.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":-0.05664835164835165},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"d702b325-6ec5-4597-b462-c1ce5f8c1578"},"available":true,"name":"202_STEAM_4","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"65edadbf-8840-4d27-9a44-24cdeddebc88"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":355379.999905232,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[9989.0,10070.0,12902.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":0.022584269662921347},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"af6f1f63-b89c-4c78-8915-897f054405c3"},"available":true,"name":"116_STEAM_1","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"caddf6b2-b5cb-46aa-b27f-f3c9bc7be361"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":820756.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[9312.0,10158.0,11294.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":0.43956043956043955},{"base_power":471.0,"prime_mover_type":"ST","rating":0.9494980796177451,"services":[],"bus":{"value":"cc3f8b48-f40e-41de-b5df-9c0542019d0f"},"available":true,"name":"121_NUCLEAR_1","status":true,"active_power":0.8492569002123143,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NUCLEAR","internal":{"uuid":{"value":"fc45470d-14ce-417e-ab6e-7357fa89c6d1"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.10615711252653928,"max":0.42462845010615713},"ext":{},"operation_cost":{"start_up":63999.82230000001,"fixed":0.0,"shut_down":31999.911150000004,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.00081035,"value_curve":{"input_at_zero":null,"initial_input":3.96e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[396.0,397.3333332,398.6666668,400.0],"y_coords":[0.0,0.0,0.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":4380.0,"down":4380.0},"must_run":false,"ramp_limits":{"up":0.0,"down":0.0},"time_at_status":10000.0,"active_power_limits":{"min":0.8407643312101911,"max":0.8492569002123143},"reactive_power":-0.046433121019108285},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"6fed2a6f-d989-4b2e-b5dd-ca2b75bb058d"},"available":true,"name":"123_CT_4","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"a505377d-0542-413a-97f6-cc0e5e57bb3b"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":279950.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6757.0,7667.0,7998.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.0096875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"6dbcc15e-3d14-4dcc-9c96-e1f0691d1168"},"available":true,"name":"207_CT_1","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"950d5697-aa25-40e4-938e-6d89ed106493"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":287122.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[8804.0,9481.0,10955.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"d212c9d5-49d8-477e-91a2-a81f099d516f"},"available":true,"name":"301_CT_3","status":true,"active_power":0.6875,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"5c873d06-586d-4302-8880-f4b8a4d6c4c6"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":287980.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[7324.0,7534.0,11253.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.25828125},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"4bdd3592-4aae-4f6e-9d06-2f8a914f8291"},"available":true,"name":"316_STEAM_1","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"e834349a-b1ec-4afb-a927-319263afa9ff"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":734452.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[9989.0,10070.0,12902.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":0.43956043956043955},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"7dc820fe-4fd9-40d7-a308-cc16f44c259a"},"available":true,"name":"216_STEAM_1","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"5cd311de-dc38-458f-9a26-f2a70adecb0b"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":674622.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[8786.0,10333.0,11191.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":0.43956043956043955},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"60325cf0-2d69-4f44-ac2a-da4256fcb6cb"},"available":true,"name":"315_CT_6","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"f6f9ff2d-510a-4ed7-b379-e36ef217cf88"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":227524.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6792.0,6919.0,8195.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"5183dd4d-2f36-4840-b19f-ca3ecbf49021"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"69e48628-2660-454a-9085-48c99d863012"},"available":true,"name":"201_STEAM_3","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"3e4450db-6f76-4e3f-9f72-ba6df0765ea5"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":389669.999896088,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[10495.0,11090.0,12185.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":0.07853932584269663},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"e69f0ad5-e088-4fac-bb71-4f86c244f8f6"},"available":true,"name":"302_CT_4","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"0139fd1b-1b0d-4e43-956c-2d24f7e9fd67"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":338690.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[8693.0,9874.0,9939.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.17171875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"8301b223-e0d0-4ca2-bd0f-39c5c92f7e08"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"b06e629f-f96d-4376-8896-09f2b344fae6"},"available":true,"name":"307_CT_1","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"c0847794-4ea1-43bb-9ac2-1b45c8a5d810"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":293766.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[7176.0,7517.0,9126.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"3a7c6bf7-e76d-4ade-afb4-05f0ff0cdddd"},"available":true,"name":"102_STEAM_4","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"6d3310cb-bee3-4a5c-acef-e3e2d4f0b6c9"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":347729.999907272,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[8734.0,9861.0,10651.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":-0.025955056179775282},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"7f397052-0682-4e99-8328-ecea2c2cb71f"},{"value":"efc8ce75-7662-4fc7-b7c7-2a90fce2e6c2"},{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"}],"bus":{"value":"c9e969ee-0360-47ac-bb9e-1fa7c9686021"},"available":true,"name":"107_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"bb7e64ed-6206-4fda-b128-d9796a9f4109"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.2277399988805898e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[5970.0,6892.0,7854.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.11958937198067632},{"name":"11.0","internal":{"uuid":{"value":"24e29287-bbe2-4650-b6aa-26674a11bb44"},"ext":null,"units_info":null},"ext":{},"peak_active_power":4.33,"peak_reactive_power":0.88,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"21.0","internal":{"uuid":{"value":"35afa8f3-0ef5-45ce-ba22-0e6ad2bc7a28"},"ext":null,"units_info":null},"ext":{},"peak_active_power":4.33,"peak_reactive_power":0.88,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"25.0","internal":{"uuid":{"value":"a922f6b4-18d5-4dad-ab7b-9b257be9e657"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.09,"peak_reactive_power":0.63,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"32.0","internal":{"uuid":{"value":"997ec446-ed79-4438-b2bc-7854f3f88e4d"},"ext":null,"units_info":null},"ext":{},"peak_active_power":5.29,"peak_reactive_power":1.08,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"33.0","internal":{"uuid":{"value":"b78629ef-7b74-460f-a4be-52633510eee2"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.7,"peak_reactive_power":0.76,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"16.0","internal":{"uuid":{"value":"514ed6af-1bc8-43d4-b706-7e4a19fcfa21"},"ext":null,"units_info":null},"ext":{},"peak_active_power":6.109999999999999,"peak_reactive_power":1.23,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"22.0","internal":{"uuid":{"value":"15ebff22-54a0-4376-bdff-d38ace7ada80"},"ext":null,"units_info":null},"ext":{},"peak_active_power":5.29,"peak_reactive_power":1.08,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"34.0","internal":{"uuid":{"value":"b18279c8-0ab5-410f-ab5f-e68ea3ecc283"},"ext":null,"units_info":null},"ext":{},"peak_active_power":2.65,"peak_reactive_power":0.54,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"26.0","internal":{"uuid":{"value":"fcdaf0ad-1721-4b98-a4e1-b925350a054e"},"ext":null,"units_info":null},"ext":{},"peak_active_power":6.109999999999999,"peak_reactive_power":1.23,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"24.0","internal":{"uuid":{"value":"d5de3f3b-b880-4913-9d8f-f331f3cf2a8a"},"ext":null,"units_info":null},"ext":{},"peak_active_power":2.65,"peak_reactive_power":0.54,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"27.0","internal":{"uuid":{"value":"2ef138e1-3a05-4325-b22f-53313296cfa3"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.33,"peak_reactive_power":0.68,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"35.0","internal":{"uuid":{"value":"d9dd8fb5-1430-443b-810a-3c38a8bf937b"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.09,"peak_reactive_power":0.63,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"12.0","internal":{"uuid":{"value":"d1d57ffe-89b3-451d-97e0-a553edacc846"},"ext":null,"units_info":null},"ext":{},"peak_active_power":5.29,"peak_reactive_power":1.08,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"13.0","internal":{"uuid":{"value":"54186d4e-4d58-46d7-ac8d-ed9fc108a994"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.7,"peak_reactive_power":0.76,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"17.0","internal":{"uuid":{"value":"219a5c3c-0d13-4d9e-87b1-d310d381bbfe"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.33,"peak_reactive_power":0.68,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"23.0","internal":{"uuid":{"value":"b03bd1ac-1a3b-4e1a-bf36-45522d371140"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.7,"peak_reactive_power":0.76,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"36.0","internal":{"uuid":{"value":"48cb8968-c9b8-4cf1-94a4-a5011c81620d"},"ext":null,"units_info":null},"ext":{},"peak_active_power":6.109999999999999,"peak_reactive_power":1.23,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"14.0","internal":{"uuid":{"value":"ee35d163-6423-4848-80cd-9bb435b23343"},"ext":null,"units_info":null},"ext":{},"peak_active_power":2.65,"peak_reactive_power":0.54,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"15.0","internal":{"uuid":{"value":"5c5aa2a0-95ff-4057-94e9-65834c7f128b"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.09,"peak_reactive_power":0.63,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"31.0","internal":{"uuid":{"value":"47f21ba4-b653-4677-9704-a4dd63c9e9a9"},"ext":null,"units_info":null},"ext":{},"peak_active_power":4.33,"peak_reactive_power":0.88,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"37.0","internal":{"uuid":{"value":"967bad7e-84d8-4326-98c5-2999e21134d1"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.33,"peak_reactive_power":0.68,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"reactive_power_limits_from":{"min":0.0,"max":1.0},"services":[],"available":true,"name":"DC1","active_power_limits_to":{"min":-1.0,"max":1.0},"arc":{"value":"5a4ae0ed-3b47-47a1-8a4e-bfabc9a44efb"},"__metadata__":{"module":"PowerSystems","type":"TwoTerminalHVDCLine"},"internal":{"uuid":{"value":"2daa008a-6bed-4338-a8f2-3e5d3fd80bb2"},"ext":null,"units_info":null},"ext":{},"loss":{"l0":0.0,"l1":0.1},"active_power_flow":0.0,"active_power_limits_from":{"min":-1.0,"max":1.0},"reactive_power_limits_to":{"min":0.0,"max":1.0}},{"base_power":101.7,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_RTPV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"406f45b2-48e3-4492-8fc9-4d756e6ad445"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":27.0,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"f1fc491a-ec56-44ca-888c-2c7e45381334"},"available":true,"name":"320_RTPV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"6c0d696f-9d4b-41b1-a7fe-1d459c8e8e4c"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":13.2,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"6c15bee4-23b2-4a02-8320-c17d12ea30ea"},"available":true,"name":"213_RTPV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"9ec65a97-3cf3-47a7-9ebd-325edfbd79cf"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":62.4,"prime_mover_type":"PVe","rating":0.30000000000000004,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_RTPV_9","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"c6e687cc-bd3c-4b00-b8e4-422f838a3b4c"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":63.1,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_RTPV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"3e5a8ee5-b126-4b32-9b1c-02e2d781c2ed"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":64.1,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_RTPV_7","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"6f079103-05e1-4776-89cb-4edeece6b734"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":28.3,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"f1fc491a-ec56-44ca-888c-2c7e45381334"},"available":true,"name":"320_RTPV_3","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"ad2aa03e-23d7-467d-9642-b4276832913c"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":100.9,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"78076c0b-9a17-4846-96ce-9334df1ab766"},"available":true,"name":"308_RTPV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"82c66c56-9192-4691-8f73-405a4f5dc6d7"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":67.0,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_RTPV_4","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"d570f98e-a4f8-4d3b-8877-c11c97ef30bc"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":64.8,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_RTPV_5","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"cd214263-955a-492c-9fea-b722c8bdacd0"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":63.8,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_RTPV_6","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"27eaedb8-e382-4955-a287-5956cb091178"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":27.3,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"f1fc491a-ec56-44ca-888c-2c7e45381334"},"available":true,"name":"320_RTPV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"20696244-9dd5-48e0-9de3-1f64c583f542"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.4,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"f1fc491a-ec56-44ca-888c-2c7e45381334"},"available":true,"name":"320_RTPV_6","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"f8791dc0-d257-454c-aa3e-8e816085eaea"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":28.2,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"f1fc491a-ec56-44ca-888c-2c7e45381334"},"available":true,"name":"320_RTPV_5","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"39000d6b-88ab-463d-b314-12b2a0dea17e"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.7,"prime_mover_type":"PVe","rating":0.29999999999999993,"services":[],"bus":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"available":true,"name":"118_RTPV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"3bd7d5e2-d18e-492b-8d7c-14301f28c714"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":27.0,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"f1fc491a-ec56-44ca-888c-2c7e45381334"},"available":true,"name":"320_RTPV_4","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"95b6bc47-6791-411f-9691-5f349c58c648"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":65.2,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_RTPV_11","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"79ca39cb-b19f-4c31-9fbd-be1795aad2c7"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":11.8,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"available":true,"name":"118_RTPV_7","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"493ef76d-65d0-4da9-a527-8229bad25652"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.4,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"available":true,"name":"118_RTPV_3","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"c334b8b3-62f8-4290-87b8-8d66d8851d3d"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":27.2,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_RTPV_13","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"837dd423-7a49-47ef-93d4-8483aa400091"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":27.8,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_RTPV_12","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"bdf5cc94-6fc0-435b-b0b9-ca6f70f1a4c0"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":11.2,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"available":true,"name":"118_RTPV_8","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"d1af7e51-31ce-4a3a-add9-80b5b40237df"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":65.4,"prime_mover_type":"PVe","rating":0.30000000000000004,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_RTPV_3","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"2bd0a3d3-3966-4391-8cd9-97953e72cafc"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":4.5,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"available":true,"name":"118_RTPV_10","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"9814c0a9-aa77-4eb3-95a4-881ac2c7b3e0"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":66.9,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_RTPV_10","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"0bc713cb-a065-46a1-ae0c-b7369d1b056d"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.1,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"available":true,"name":"118_RTPV_5","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"40ec7a81-e6e9-4392-ab5d-e1e59eca619a"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.3,"prime_mover_type":"PVe","rating":0.30000000000000004,"services":[],"bus":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"available":true,"name":"118_RTPV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"d95d9d0d-c0cf-4ef1-81a6-117f28dce905"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":10.3,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"available":true,"name":"118_RTPV_9","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"2a21a71c-c398-4d0e-9325-4f93de40ec03"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.7,"prime_mover_type":"PVe","rating":0.29999999999999993,"services":[],"bus":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"available":true,"name":"118_RTPV_6","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"abf4bf7d-66e5-4d38-b2f9-7b9d2bf79145"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":66.6,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"765835a0-9371-4b70-835f-584516769222"},"available":true,"name":"313_RTPV_8","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"423037c1-bfc0-43a0-8089-53b92dbb9838"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.1,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"80161c3b-551f-48a3-aa09-e48eed5cee78"},"available":true,"name":"118_RTPV_4","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"b7d6fadc-60b7-418f-bd97-45ac07dcb279"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":53.0,"prime_mover_type":"HY","rating":0.9905211130872972,"services":[],"bus":{"value":"69e48628-2660-454a-9085-48c99d863012"},"available":true,"name":"201_HYDRO_4","active_power":0.9433962264150944,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"HydroDispatch"},"internal":{"uuid":{"value":"5b774c4c-a23b-41a3-93c1-3e61a4778940"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.18867924528301888,"max":0.3018867924528302},"ext":{},"operation_cost":{"fixed":0.0,"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"HydroGenerationCost"}},"time_limits":{"up":0.0,"down":0.0},"ramp_limits":{"up":0.9433962264150944,"down":0.9433962264150944},"active_power_limits":{"min":0.0,"max":0.9433962264150944},"reactive_power":0.07830188679245284},{"requirement":1.3475000000000001,"max_participation_factor":1.0,"sustained_time":3600.0,"available":true,"name":"Reg_Down","__metadata__":{"parameters":["ReserveDown"],"construct_with_parameters":true,"module":"PowerSystems","type":"VariableReserve"},"internal":{"uuid":{"value":"21cd63e8-903e-46fe-9117-4f8786e72a9f"},"ext":null,"units_info":null},"time_frame":300.0,"ext":{},"deployed_fraction":0.0,"max_output_fraction":1.0}],"subsystems":{},"version_info":{"julia_version":"1.10.4","package_info":"Status `~/work/PowerSimulations.jl/PowerSimulations.jl/docs/Manifest.toml`\n [a4c015fc] ANSIColoredPrinters v0.0.1\n [1520ce14] AbstractTrees v0.4.5\n [79e6a3ab] Adapt v4.0.4\n [4fba245c] ArrayInterface v7.12.0\n [6e4b80f9] BenchmarkTools v1.5.0\n [a74b3585] Blosc v0.7.3\n [336ed68f] CSV v0.10.14\n [9961bab8] Cbc v1.2.0\n [523fee87] CodecBzip2 v0.8.3\n [944b1d66] CodecZlib v0.7.5\n [bbf7d656] CommonSubexpressions v0.3.0\n [34da2185] Compat v4.15.0\n [187b0558] ConstructionBase v1.5.6\n [a8cc5b0e] Crayons v4.1.1\n [a10d1c49] DBInterface v2.6.1\n [9a962f9c] DataAPI v1.16.0\n [a93c6f00] DataFrames v1.6.1\n [864edb3b] DataStructures v0.18.20\n [e2d170a0] DataValueInterfaces v1.0.0\n [8bb1440f] DelimitedFiles v1.9.1\n [163ba53b] DiffResults v1.1.0\n [b552c78f] DiffRules v1.15.1\n [b4f34e82] Distances v0.10.11\n [ffbed154] DocStringExtensions v0.9.3\n⌅ [e30172f5] Documenter v0.27.25\n [35a29f4d] DocumenterTools v0.1.19\n [e2ba6199] ExprTools v0.1.10\n [48062228] FilePathsBase v0.9.21\n [6a86dc24] FiniteDiff v2.23.1\n [1fa38f19] Format v1.3.7\n [f6369f11] ForwardDiff v0.10.36\n [60bf3e95] GLPK v1.2.1\n [708ec375] Gumbo v0.8.2\n [c8ec2601] H5Zblosc v0.1.2\n [f67ccb44] HDF5 v0.17.2\n [87dc4568] HiGHS v1.9.1\n [fc1677e0] HydroPowerSimulations v0.9.1\n [b5f81e59] IOCapture v0.2.5\n [2030c09a] InfrastructureModels v0.7.8\n [2cd47ed4] InfrastructureSystems v2.0.2\n [842dd82b] InlineStrings v1.4.2\n [41ab1584] InvertedIndices v1.3.0\n [92d709cd] IrrationalConstants v0.2.2\n [82899510] IteratorInterfaceExtensions v1.0.0\n [692b3bcd] JLLWrappers v1.5.0\n [682c06a0] JSON v0.21.4\n [0f8b85d8] JSON3 v1.14.0\n [4076af6c] JuMP v1.22.2\n [ef3ab10e] KLU v0.6.0\n [b964fa9f] LaTeXStrings v1.3.1\n⌅ [23fbe1c1] Latexify v0.16.3\n [1d6d02ad] LeftChildRightSiblingTrees v0.2.0\n [d3d80556] LineSearches v7.2.0\n [2ab3a3ac] LogExpFunctions v0.3.28\n⌅ [33e6dc65] MKL v0.6.3\n [3da0fdf6] MPIPreferences v0.1.11\n [1914dd2f] MacroTools v0.5.13\n [b8f27783] MathOptInterface v1.31.0\n [f28f55f0] Memento v1.4.1\n [e1d29d7a] Missings v1.2.0\n [ffc61752] Mustache v1.0.19\n [d8a4904e] MutableArithmetics v1.4.5\n [d41bc354] NLSolversBase v7.8.3\n [2774e3e8] NLsolve v4.5.1\n [77ba4419] NaNMath v1.0.2\n [bac558e1] OrderedCollections v1.6.3\n [d96e819e] Parameters v0.12.3\n [46dd5b70] Pardiso v0.5.7\n [69de0a69] Parsers v2.8.1\n [2dfb63ee] PooledArrays v1.4.3\n [dd99e9e3] PowerFlowData v1.5.0\n [c36e90e8] PowerModels v0.21.2\n [bed98974] PowerNetworkMatrices v0.11.0\n [e690365d] PowerSimulations v0.28.3 `~/work/PowerSimulations.jl/PowerSimulations.jl`\n [f00506e0] PowerSystemCaseBuilder v1.3.4\n [bcd98974] PowerSystems v4.1.4\n [aea7be01] PrecompileTools v1.2.1\n [21216c6a] Preferences v1.4.3\n [08abe8d2] PrettyTables v2.3.2\n [33c8b6b6] ProgressLogging v0.1.4\n [92933f4c] ProgressMeter v1.10.2\n [3cdcf5f2] RecipesBase v1.3.4\n [189a3867] Reexport v1.2.2\n [ae029012] Requires v1.3.0\n [0aa819cd] SQLite v1.6.1\n [322a6be2] Sass v0.2.0\n [91c51154] SentinelArrays v1.4.5\n [efcf1570] Setfield v1.1.1\n [a2af1166] SortingAlgorithms v1.2.1\n [276daf66] SpecialFunctions v2.4.0\n [1e83bf80] StaticArraysCore v1.4.3\n [82ae8749] StatsAPI v1.7.0\n [69024149] StringEncodings v0.3.7\n [892a3eda] StringManipulation v0.3.4\n [856f2bd8] StructTypes v1.10.0\n [3783bdb8] TableTraits v1.0.1\n [bd369af6] Tables v1.12.0\n [5d786b92] TerminalLoggers v0.1.7\n [9e3dc215] TimeSeries v0.24.2\n [a759f4b9] TimerOutputs v0.5.24\n [3bb67fe8] TranscodingStreams v0.11.1\n [3a884ed6] UnPack v1.0.2\n [ea10d353] WeakRefStrings v1.4.2\n [76eceee3] WorkerUtilities v1.6.1\n [ddb6d928] YAML v0.4.11\n [ae81ac8f] ASL_jll v0.1.3+0\n [0b7ba130] Blosc_jll v1.21.5+0\n [6e34b625] Bzip2_jll v1.0.8+1\n [38041ee0] Cbc_jll v200.1000.800+0\n [3830e938] Cgl_jll v0.6000.600+0\n⌅ [06985876] Clp_jll v100.1700.700+1\n⌅ [be027038] CoinUtils_jll v200.1100.600+0\n [e8aa6df9] GLPK_jll v5.0.1+0\n [528830af] Gumbo_jll v0.10.2+0\n⌃ [0234f1f7] HDF5_jll v1.12.2+2\n [8fd58aa0] HiGHS_jll v1.7.1+0\n [1d5cc7b8] IntelOpenMP_jll v2024.2.0+0\n [94ce4f54] Libiconv_jll v1.17.0+0\n [5ced341a] Lz4_jll v1.9.4+0\n [d00139f3] METIS_jll v5.1.2+0\n [856f044c] MKL_jll v2024.2.0+0\n [d7ed1dd3] MUMPS_seq_jll v500.700.300+0\n⌅ [656ef2d0] OpenBLAS32_jll v0.3.24+0\n⌅ [9bd350c2] OpenSSH_jll v8.9.0+1\n⌅ [458c3c95] OpenSSL_jll v1.1.23+0\n [efe28fd5] OpenSpecFun_jll v0.5.5+0\n⌅ [7da25872] Osi_jll v0.10800.700+0\n [76ed43ae] SQLite_jll v3.45.3+0\n [3161d3a3] Zstd_jll v1.5.6+0\n [47bcb7c8] libsass_jll v3.6.6+0\n [1317d2d5] oneTBB_jll v2021.12.0+0\n [0dad84c5] ArgTools v1.1.1\n [56f22d72] Artifacts\n [2a0f44e3] Base64\n [ade2ca70] Dates\n [8ba89e20] Distributed\n [f43a241f] Downloads v1.6.0\n [7b1f6079] FileWatching\n [9fa8497b] Future\n [b77e0a4c] InteractiveUtils\n [4af54fe1] LazyArtifacts\n [b27032c2] LibCURL v0.6.4\n [76f85450] LibGit2\n [8f399da3] Libdl\n [37e2e46d] LinearAlgebra\n [56ddb016] Logging\n [d6f4376e] Markdown\n [a63ad114] Mmap\n [ca575930] NetworkOptions v1.2.0\n [44cfe95a] Pkg v1.10.0\n [de0858da] Printf\n [9abbd945] Profile\n [3fa0cd96] REPL\n [9a3f8284] Random\n [ea8e919c] SHA v0.7.0\n [9e88b42a] Serialization\n [6462fe0b] Sockets\n [2f01184e] SparseArrays v1.10.0\n [10745b16] Statistics v1.10.0\n [4607b0f0] SuiteSparse\n [fa267f1f] TOML v1.0.3\n [a4e569a6] Tar v1.10.0\n [8dfed614] Test\n [cf7118a7] UUIDs\n [4ec0a83e] Unicode\n [e66e0078] CompilerSupportLibraries_jll v1.1.1+0\n [781609d7] GMP_jll v6.2.1+6\n [deac9b47] LibCURL_jll v8.4.0+0\n [e37daf67] LibGit2_jll v1.6.4+0\n [29816b5a] LibSSH2_jll v1.11.0+1\n [c8ffd9c3] MbedTLS_jll v2.28.2+1\n [14a3606d] MozillaCACerts_jll v2023.1.10\n [4536629a] OpenBLAS_jll v0.3.23+4\n [05823500] OpenLibm_jll v0.8.1+2\n [bea87d4a] SuiteSparse_jll v7.2.1+1\n [83775a58] Zlib_jll v1.2.13+1\n [8e850b90] libblastrampoline_jll v5.8.0+1\n [8e850ede] nghttp2_jll v1.52.0+1\n [3f19e933] p7zip_jll v17.4.0+2\nInfo Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`\n"},"time_series_storage_file":"system-83465dce-52e5-480f-aad4-9ae9026fdea5_time_series_storage.h5"},"units_settings":{"base_value":100.0,"unit_system":"SYSTEM_BASE","__metadata__":{"module":"InfrastructureSystems","type":"SystemUnitsSettings"}},"frequency":60.0,"runchecks":true,"metadata":{"name":null,"description":null,"__metadata__":{"module":"PowerSystems","type":"SystemMetadata"}},"data_format_version":"4.0.0"} \ No newline at end of file diff --git a/v0.28.3/tutorials/rts-store/rts-test/problems/ED/system-83465dce-52e5-480f-aad4-9ae9026fdea5_metadata.json b/v0.28.3/tutorials/rts-store/rts-test/problems/ED/system-83465dce-52e5-480f-aad4-9ae9026fdea5_metadata.json new file mode 100644 index 0000000000..2981469684 --- /dev/null +++ b/v0.28.3/tutorials/rts-store/rts-test/problems/ED/system-83465dce-52e5-480f-aad4-9ae9026fdea5_metadata.json @@ -0,0 +1,80 @@ +{ + "name": "", + "description": "", + "frequency": 60, + "time_series_resolutions_milliseconds": [ + 300000 + ], + "component_counts": [ + { + "type": "ACBus", + "count": 73 + }, + { + "type": "Arc", + "count": 109 + }, + { + "type": "Area", + "count": 1 + }, + { + "type": "FixedAdmittance", + "count": 3 + }, + { + "type": "HydroDispatch", + "count": 1 + }, + { + "type": "Line", + "count": 105 + }, + { + "type": "LoadZone", + "count": 21 + }, + { + "type": "PowerLoad", + "count": 51 + }, + { + "type": "RenewableDispatch", + "count": 29 + }, + { + "type": "RenewableNonDispatch", + "count": 31 + }, + { + "type": "TapTransformer", + "count": 15 + }, + { + "type": "ThermalStandard", + "count": 54 + }, + { + "type": "TwoTerminalHVDCLine", + "count": 1 + }, + { + "type": "VariableReserve{ReserveDown}", + "count": 1 + }, + { + "type": "VariableReserve{ReserveUp}", + "count": 4 + } + ], + "time_series_counts": [ + { + "type": "DeterministicSingleTimeSeries", + "count": 122 + }, + { + "type": "SingleTimeSeries", + "count": 122 + } + ] +} \ No newline at end of file diff --git a/v0.28.3/tutorials/rts-store/rts-test/problems/ED/system-83465dce-52e5-480f-aad4-9ae9026fdea5_time_series_storage.h5 b/v0.28.3/tutorials/rts-store/rts-test/problems/ED/system-83465dce-52e5-480f-aad4-9ae9026fdea5_time_series_storage.h5 new file mode 100644 index 0000000000..20a98aa284 Binary files /dev/null and b/v0.28.3/tutorials/rts-store/rts-test/problems/ED/system-83465dce-52e5-480f-aad4-9ae9026fdea5_time_series_storage.h5 differ diff --git a/v0.28.3/tutorials/rts-store/rts-test/problems/UC/initial_conditions.bin b/v0.28.3/tutorials/rts-store/rts-test/problems/UC/initial_conditions.bin new file mode 100644 index 0000000000..409c6742f7 Binary files /dev/null and b/v0.28.3/tutorials/rts-store/rts-test/problems/UC/initial_conditions.bin differ diff --git a/v0.28.3/tutorials/rts-store/rts-test/problems/UC/model.bin b/v0.28.3/tutorials/rts-store/rts-test/problems/UC/model.bin new file mode 100644 index 0000000000..179e33de4a Binary files /dev/null and b/v0.28.3/tutorials/rts-store/rts-test/problems/UC/model.bin differ diff --git a/v0.28.3/tutorials/rts-store/rts-test/problems/UC/optimization_container_metadata.bin b/v0.28.3/tutorials/rts-store/rts-test/problems/UC/optimization_container_metadata.bin new file mode 100644 index 0000000000..01f44821b7 Binary files /dev/null and b/v0.28.3/tutorials/rts-store/rts-test/problems/UC/optimization_container_metadata.bin differ diff --git a/v0.28.3/tutorials/rts-store/rts-test/problems/UC/system-d4831ec5-1be7-4057-aa3f-e30006d9ba3b.json b/v0.28.3/tutorials/rts-store/rts-test/problems/UC/system-d4831ec5-1be7-4057-aa3f-e30006d9ba3b.json new file mode 100644 index 0000000000..16de00eedd --- /dev/null +++ b/v0.28.3/tutorials/rts-store/rts-test/problems/UC/system-d4831ec5-1be7-4057-aa3f-e30006d9ba3b.json @@ -0,0 +1 @@ +{"internal":{"uuid":{"value":"d4831ec5-1be7-4057-aa3f-e30006d9ba3b"},"ext":null,"units_info":null},"data":{"time_series_storage_type":"InfrastructureSystems.Hdf5TimeSeriesStorage","masked_components":[],"supplemental_attribute_manager":{"attributes":[],"associations":[]},"internal":{"uuid":{"value":"9bbc07c2-7800-4e5b-b639-abe29e9752a3"},"ext":{},"units_info":null},"components":[{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"B15","reactive_power_flow":0.0,"arc":{"value":"93158e94-6f7a-462b-aec7-3ce93c2c21ef"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"d2911410-0083-4108-ae3e-0f5e331530c3"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.03},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"B14","reactive_power_flow":0.0,"arc":{"value":"27e334ab-ff77-4b9c-bc7b-3dadf06873ff"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"9dd7436e-bcd7-4fd6-85f9-99ced4efcb3d"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.03},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"A17","reactive_power_flow":0.0,"arc":{"value":"f3994ee0-ca79-4bed-99e7-44c0f0ca6e0b"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"c1ec02d9-053c-4cd9-9069-851d5fb414fc"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"C16","reactive_power_flow":0.0,"arc":{"value":"e2097e86-053d-4fff-8518-043ae6e3a9b7"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"2fbbf908-9c84-4765-bc13-2d347cfe207e"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"B17","reactive_power_flow":0.0,"arc":{"value":"2d608f23-b3fe-469b-a472-23f79dd5dee4"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"850cffb2-62ce-4cee-9b97-2db6187e7560"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"A14","reactive_power_flow":0.0,"arc":{"value":"dc2f6df8-0b73-4da3-bfe0-1f83de7f7564"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"3c961672-a98e-4632-a190-dae9b1ace14d"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.03},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"C15","reactive_power_flow":0.0,"arc":{"value":"87a623c7-6d26-4e54-b41e-30136e5f6580"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"5df9aca5-2352-4b9c-b525-13bcd115ca4b"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.03},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"B7","reactive_power_flow":0.0,"arc":{"value":"4fbd87f2-4d9a-4799-bc61-5d71b98ca63e"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"5bc351bb-eae9-40c8-b84b-40996f7a6f4a"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"A7","reactive_power_flow":0.0,"arc":{"value":"f7b4104a-3813-494a-9ebb-b0d7e4c21770"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"79aac5c6-78cc-469e-a70e-fb676e2ab41a"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"A16","reactive_power_flow":0.0,"arc":{"value":"de570da5-3cdb-4519-9bac-2116a3cd1ec9"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"3b875e51-0219-4c0d-89f9-902e7f345f42"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"C17","reactive_power_flow":0.0,"arc":{"value":"0d0861ca-b4ae-4480-bd9a-796c6c753c57"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"0aa842cf-c75f-460c-8954-ee48b28b486d"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"A15","reactive_power_flow":0.0,"arc":{"value":"290fdd1c-2669-49d5-a51e-cf1e7deee780"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"5407f350-0021-4d2c-a21b-66f2f82f4f8a"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.03},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"B16","reactive_power_flow":0.0,"arc":{"value":"06c2844a-fcf9-4fa2-9c3c-b02feff59891"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"b8290199-0dbb-49a2-a70f-30f1dfa030ed"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"C7","reactive_power_flow":0.0,"arc":{"value":"6a9c0366-6ff8-4a3e-8a56-1810c34b778a"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"1dccb6ce-8d60-47b1-89ea-f5284353f70b"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.015},{"rating":4.0,"services":[],"x":0.084,"r":0.002,"available":true,"name":"C14","reactive_power_flow":0.0,"arc":{"value":"a6f625b6-8e1a-477e-9843-0b43a4f2d407"},"__metadata__":{"module":"PowerSystems","type":"TapTransformer"},"internal":{"uuid":{"value":"7be6331e-dd79-4bad-bd15-606fe715adc9"},"ext":null,"units_info":null},"ext":{},"primary_shunt":0.0,"active_power_flow":0.0,"tap":1.03},{"requirement":0.42851,"max_participation_factor":1.0,"sustained_time":3600.0,"available":true,"name":"Spin_Up_R2","__metadata__":{"parameters":["ReserveUp"],"construct_with_parameters":true,"module":"PowerSystems","type":"VariableReserve"},"internal":{"uuid":{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},"ext":null,"units_info":null},"time_frame":600.0,"ext":{},"deployed_fraction":0.0,"max_output_fraction":1.0},{"requirement":0.5666599999999999,"max_participation_factor":1.0,"sustained_time":3600.0,"available":true,"name":"Spin_Up_R3","__metadata__":{"parameters":["ReserveUp"],"construct_with_parameters":true,"module":"PowerSystems","type":"VariableReserve"},"internal":{"uuid":{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},"ext":null,"units_info":null},"time_frame":600.0,"ext":{},"deployed_fraction":0.0,"max_output_fraction":1.0},{"requirement":1.26,"max_participation_factor":1.0,"sustained_time":3600.0,"available":true,"name":"Reg_Up","__metadata__":{"parameters":["ReserveUp"],"construct_with_parameters":true,"module":"PowerSystems","type":"VariableReserve"},"internal":{"uuid":{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},"ext":null,"units_info":null},"time_frame":300.0,"ext":{},"deployed_fraction":0.0,"max_output_fraction":1.0},{"requirement":0.40413,"max_participation_factor":1.0,"sustained_time":3600.0,"available":true,"name":"Spin_Up_R1","__metadata__":{"parameters":["ReserveUp"],"construct_with_parameters":true,"module":"PowerSystems","type":"VariableReserve"},"internal":{"uuid":{"value":"32571851-ee3f-4876-bf85-777243c16355"},"ext":null,"units_info":null},"time_frame":600.0,"ext":{},"deployed_fraction":0.0,"max_output_fraction":1.0},{"Y":{"real":0.0,"imag":-1.0},"name":"Camus","internal":{"uuid":{"value":"c1f9acbc-8c9f-4706-a61c-0e59c5b8b005"},"ext":null,"units_info":null},"services":[],"ext":{},"bus":{"value":"04c6531b-d9aa-413f-ba97-8cb5bb98334f"},"dynamic_injector":null,"available":true,"__metadata__":{"module":"PowerSystems","type":"FixedAdmittance"}},{"Y":{"real":0.0,"imag":-1.0},"name":"Bajer","internal":{"uuid":{"value":"27e6fdcc-fbc8-4e43-81cb-dbc73cc864c0"},"ext":null,"units_info":null},"services":[],"ext":{},"bus":{"value":"f25c4d10-e062-440a-b666-88fe33b9f7b5"},"dynamic_injector":null,"available":true,"__metadata__":{"module":"PowerSystems","type":"FixedAdmittance"}},{"Y":{"real":0.0,"imag":-1.0},"name":"Alber","internal":{"uuid":{"value":"54b8c1bc-3853-46d7-b5fe-7414160df4d4"},"ext":null,"units_info":null},"services":[],"ext":{},"bus":{"value":"70f94b66-5398-4e42-9d7a-d4561b5a41c0"},"dynamic_injector":null,"available":true,"__metadata__":{"module":"PowerSystems","type":"FixedAdmittance"}},{"internal":{"uuid":{"value":"db959349-6d2c-49f3-9ad0-c0c8146786f8"},"ext":null,"units_info":null},"to":{"value":"ddfc9c5e-f978-4523-84ca-7f3bff484639"},"from":{"value":"7e12cfe4-854f-4eaa-86a9-312b188619a7"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"fa5deab9-5034-4197-be1f-ca7f33abee20"},"ext":null,"units_info":null},"to":{"value":"ab966bc8-7742-44f9-9993-8d7b399c418b"},"from":{"value":"850fe97f-e042-4197-8ca3-693e595bd77d"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"607803f1-5143-4551-a10a-c7faefaa6a3a"},"ext":null,"units_info":null},"to":{"value":"ff8cb561-d277-4ed7-a228-32a618645b37"},"from":{"value":"70f94b66-5398-4e42-9d7a-d4561b5a41c0"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"cb24e3fd-473e-413e-a404-ee4e99b9c5d0"},"ext":null,"units_info":null},"to":{"value":"0e6eb978-4512-4505-bddd-4d019ed7a7cb"},"from":{"value":"ddfc9c5e-f978-4523-84ca-7f3bff484639"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"e855c6ab-1b85-4bf1-bde0-27346c5415b8"},"ext":null,"units_info":null},"to":{"value":"9732ddab-fa61-4c4c-b176-ed93ffb878e8"},"from":{"value":"f356ec1b-e66e-450b-80ef-c8cfe2e70802"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"27e334ab-ff77-4b9c-bc7b-3dadf06873ff"},"ext":null,"units_info":null},"to":{"value":"bebe76f7-f299-4272-ac5d-3dc750b2ce87"},"from":{"value":"ddabdfef-209e-45b1-b4d3-33c7701b8702"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"ebbbb3f8-d763-4c90-a89f-7e8379791ca1"},"ext":null,"units_info":null},"to":{"value":"8e3afcb3-9e7f-4bee-b476-141963fa7c6f"},"from":{"value":"aba3b299-d290-4ad9-831f-0a3aa0cbe752"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"dd886054-5f54-462a-8e7b-9095caad2431"},"ext":null,"units_info":null},"to":{"value":"ebc194c0-e418-403a-8ce8-c182183ef1d3"},"from":{"value":"9c9ad013-9376-4a47-b509-adce298f96a2"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"632f1b8c-c678-4aff-946a-68cf03bfa7d8"},"ext":null,"units_info":null},"to":{"value":"2db4e2d8-c0ac-4201-8d81-f5ee7493bb6f"},"from":{"value":"9baccc3b-03b4-4d16-8e7f-e72b40aed605"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"9d52b3a0-6913-4fa4-86db-df367de195cf"},"ext":null,"units_info":null},"to":{"value":"a888f416-15e5-4097-b44a-3220b01169c1"},"from":{"value":"b79a0156-f2d8-4678-a817-c03ddbc37601"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"e443ec53-6122-430a-94a3-66ce166bb17e"},"ext":null,"units_info":null},"to":{"value":"cd83ffee-33a7-432f-8bd8-0d83f9473178"},"from":{"value":"832a6569-e17d-4037-b8f8-4fe974a903b0"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"e5d42067-8e84-459f-a338-6a9263e6bec4"},"ext":null,"units_info":null},"to":{"value":"29a90993-fff2-4706-9ecb-8f4130cc083b"},"from":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"6f1fe10a-8a1b-4ca8-8a92-c06e1a47f057"},"ext":null,"units_info":null},"to":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"from":{"value":"850fe97f-e042-4197-8ca3-693e595bd77d"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"3639b09d-b705-415b-abc8-666787ef3c3f"},"ext":null,"units_info":null},"to":{"value":"70f94b66-5398-4e42-9d7a-d4561b5a41c0"},"from":{"value":"2db4e2d8-c0ac-4201-8d81-f5ee7493bb6f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"afaae3da-5c45-47e2-bf77-5e66955a0320"},"ext":null,"units_info":null},"to":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"from":{"value":"b6422506-c3b9-4461-badd-e3c04667ee0f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"94789911-8228-4b3c-8918-5338f5b20ebd"},"ext":null,"units_info":null},"to":{"value":"9c9ad013-9376-4a47-b509-adce298f96a2"},"from":{"value":"3ca9df73-7978-4df8-97bf-56fa68b787ac"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"2925fedc-d8dd-4ac8-9230-a86380161b1a"},"ext":null,"units_info":null},"to":{"value":"ce6350dc-73c2-444e-ba12-75ca2bd82b61"},"from":{"value":"ab966bc8-7742-44f9-9993-8d7b399c418b"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"b0ee4e08-87ee-4938-9599-c7b361d84598"},"ext":null,"units_info":null},"to":{"value":"e3cf8c18-e2dc-43a0-8f31-6ddb07cf6599"},"from":{"value":"0952a653-69a1-48b5-9de3-00a3e22b2ada"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"415066d5-bd65-4ef3-8b34-65cfee4b29e9"},"ext":null,"units_info":null},"to":{"value":"e3609e90-84fd-43a1-a840-803e0041f5f8"},"from":{"value":"8e3afcb3-9e7f-4bee-b476-141963fa7c6f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"fe8f1a8f-5aee-4d44-8c8b-e5292510b083"},"ext":null,"units_info":null},"to":{"value":"1af1f873-ede3-44de-bee2-011797fd973f"},"from":{"value":"9b183c0a-7bce-4253-a0b1-f49fb21250bf"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"06c4fd75-9b1f-4559-a7f9-726e1706b222"},"ext":null,"units_info":null},"to":{"value":"bc538156-a62e-4493-83dd-87bfa31c55ec"},"from":{"value":"0e6eb978-4512-4505-bddd-4d019ed7a7cb"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"9207e135-71e6-4428-b74d-a3b8f4d825ee"},"ext":null,"units_info":null},"to":{"value":"b9407086-cd2e-46fa-ba33-172c2941f753"},"from":{"value":"218deb6c-bd8e-43d2-9310-51a6e8ec9955"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"d3266471-01ba-47e8-8d92-b71ce6abc254"},"ext":null,"units_info":null},"to":{"value":"03de3f59-e8f6-49de-b44a-eae9c74bb271"},"from":{"value":"9baccc3b-03b4-4d16-8e7f-e72b40aed605"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"0454e154-6332-4d67-814e-4916b729c664"},"ext":null,"units_info":null},"to":{"value":"ab966bc8-7742-44f9-9993-8d7b399c418b"},"from":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"f53ea93d-4950-4a93-b3fc-f44311c82764"},"ext":null,"units_info":null},"to":{"value":"9442817c-885b-4d85-9990-23ea201c62a1"},"from":{"value":"41a4070e-75db-4e0b-96a5-2394fb58217b"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"6f65c55b-c4cf-4235-95ca-7f93bc46b5c9"},"ext":null,"units_info":null},"to":{"value":"cd83ffee-33a7-432f-8bd8-0d83f9473178"},"from":{"value":"03de3f59-e8f6-49de-b44a-eae9c74bb271"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"06c2844a-fcf9-4fa2-9c3c-b02feff59891"},"ext":null,"units_info":null},"to":{"value":"bebe76f7-f299-4272-ac5d-3dc750b2ce87"},"from":{"value":"9442817c-885b-4d85-9990-23ea201c62a1"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"7b110b62-6b5c-4a58-b959-81051f326e94"},"ext":null,"units_info":null},"to":{"value":"41a4070e-75db-4e0b-96a5-2394fb58217b"},"from":{"value":"884b00b1-08b6-43bd-8dea-a0d673f2f2db"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"35777c9e-19a5-449d-8e1b-47b694fedae4"},"ext":null,"units_info":null},"to":{"value":"3ca9df73-7978-4df8-97bf-56fa68b787ac"},"from":{"value":"807e523d-a43c-49ba-8410-357c65d9aada"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"bae254ca-3d86-4631-9017-14a8ee5cfd6f"},"ext":null,"units_info":null},"to":{"value":"1af1f873-ede3-44de-bee2-011797fd973f"},"from":{"value":"5e92de8e-4e6a-439a-a8de-0a724beca21a"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"04ca3a2f-8313-4f46-8fe3-90b5fa43dff4"},"ext":null,"units_info":null},"to":{"value":"9b183c0a-7bce-4253-a0b1-f49fb21250bf"},"from":{"value":"df1bf7dc-30f1-41ef-b15b-d4d634a794ac"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"f5026712-bc50-452a-9656-98178e7a6beb"},"ext":null,"units_info":null},"to":{"value":"9d11e0f0-a3be-4a48-9f3f-c752f31d8443"},"from":{"value":"f356ec1b-e66e-450b-80ef-c8cfe2e70802"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"d4feff5d-2c48-4bf2-9cb2-e6504d03d063"},"ext":null,"units_info":null},"to":{"value":"041b05bb-c182-42b9-9358-0426ebce9853"},"from":{"value":"29a90993-fff2-4706-9ecb-8f4130cc083b"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"1c35e72f-8b53-40a6-a408-49f546fd0728"},"ext":null,"units_info":null},"to":{"value":"df1bf7dc-30f1-41ef-b15b-d4d634a794ac"},"from":{"value":"3ca9df73-7978-4df8-97bf-56fa68b787ac"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"5b1b963b-d768-4cd1-a423-0bb80c7b524e"},"ext":null,"units_info":null},"to":{"value":"04c6531b-d9aa-413f-ba97-8cb5bb98334f"},"from":{"value":"1a2750f7-765e-4307-9077-591730e1b3d7"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"bc6ab113-f1b2-429b-92e7-7c0872e31d0b"},"ext":null,"units_info":null},"to":{"value":"5e92de8e-4e6a-439a-a8de-0a724beca21a"},"from":{"value":"c369f892-9f64-4fca-ad27-987e501596e0"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"3347111a-6dc6-475d-bf81-a3aa36f886fa"},"ext":null,"units_info":null},"to":{"value":"ff8cb561-d277-4ed7-a228-32a618645b37"},"from":{"value":"b5260c9d-2d43-400a-bee9-eecc9d9d6465"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"cc5f00e0-af71-4adb-b5b5-affad1a0b2dd"},"ext":null,"units_info":null},"to":{"value":"b9407086-cd2e-46fa-ba33-172c2941f753"},"from":{"value":"19de644e-22af-4729-8a55-a2e7f41ff2f4"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"113a39cd-96f5-4e25-b6d2-b798292e6c2e"},"ext":null,"units_info":null},"to":{"value":"0952a653-69a1-48b5-9de3-00a3e22b2ada"},"from":{"value":"90dda615-0431-4b18-aaac-54aac9227f20"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"964ba18f-6717-4bef-9d79-7c263137d785"},"ext":null,"units_info":null},"to":{"value":"48364fdf-90e3-439d-943d-ed503d49d2c6"},"from":{"value":"6c4f0ae4-e893-4ffd-9def-391110e10cba"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"30e2bfbc-a19f-415f-9c79-93143d96b8fd"},"ext":null,"units_info":null},"to":{"value":"feca18b2-4a7b-45f0-8e9b-eaf8e643b622"},"from":{"value":"b6422506-c3b9-4461-badd-e3c04667ee0f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"fbed7f83-7116-4bcf-9c92-f67abff75202"},"ext":null,"units_info":null},"to":{"value":"19de644e-22af-4729-8a55-a2e7f41ff2f4"},"from":{"value":"d76a05da-dca0-45bd-8fb4-6ad9e732d09b"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"0ef0fe7f-27d0-4d47-a58f-261ebd1258ad"},"ext":null,"units_info":null},"to":{"value":"ddabdfef-209e-45b1-b4d3-33c7701b8702"},"from":{"value":"f1f42a05-e08e-4511-8cb6-0d4376f08905"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"f3887953-1a05-477e-9c10-807c3484e569"},"ext":null,"units_info":null},"to":{"value":"ddfc9c5e-f978-4523-84ca-7f3bff484639"},"from":{"value":"119f1d8b-8559-4c7e-b70b-1b7be69c6902"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"e53ed875-e2fb-4702-bb5a-33b0b5fa9509"},"ext":null,"units_info":null},"to":{"value":"eb81aa38-94d2-417d-a426-0e8463be3225"},"from":{"value":"968fc7b3-2f14-4de5-ad31-502862064e79"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"6a9c0366-6ff8-4a3e-8a56-1810c34b778a"},"ext":null,"units_info":null},"to":{"value":"9d5953c3-c3da-483f-8685-9a84bf179215"},"from":{"value":"a888f416-15e5-4097-b44a-3220b01169c1"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"aa54b07c-67cb-4378-b672-c30a98257a10"},"ext":null,"units_info":null},"to":{"value":"7a52d27e-cef7-4783-a677-d099eab42693"},"from":{"value":"8e3afcb3-9e7f-4bee-b476-141963fa7c6f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"290fdd1c-2669-49d5-a51e-cf1e7deee780"},"ext":null,"units_info":null},"to":{"value":"d76a05da-dca0-45bd-8fb4-6ad9e732d09b"},"from":{"value":"cd83ffee-33a7-432f-8bd8-0d83f9473178"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"de570da5-3cdb-4519-9bac-2116a3cd1ec9"},"ext":null,"units_info":null},"to":{"value":"b38a0c7b-b37d-4026-afdc-9ef69faf326c"},"from":{"value":"ff8cb561-d277-4ed7-a228-32a618645b37"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"4bdf53ed-64d3-4fbd-879b-67bf509b9ad4"},"ext":null,"units_info":null},"to":{"value":"0952a653-69a1-48b5-9de3-00a3e22b2ada"},"from":{"value":"f38e5eca-680c-485c-b314-bb0ae5d4956e"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"d37f0f00-6540-40d7-ad0a-e99442d865da"},"ext":null,"units_info":null},"to":{"value":"1af1f873-ede3-44de-bee2-011797fd973f"},"from":{"value":"c369f892-9f64-4fca-ad27-987e501596e0"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"ce20dcf3-5616-449d-a2a9-020f80857e1b"},"ext":null,"units_info":null},"to":{"value":"b4721c4e-647f-4de4-ad4f-17bc7782bf98"},"from":{"value":"df1bf7dc-30f1-41ef-b15b-d4d634a794ac"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"42652a58-e860-4c50-88a7-580fe3d9aa99"},"ext":null,"units_info":null},"to":{"value":"e3609e90-84fd-43a1-a840-803e0041f5f8"},"from":{"value":"04c6531b-d9aa-413f-ba97-8cb5bb98334f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"1fe91d03-551c-4f53-9f38-54b3b378a54f"},"ext":null,"units_info":null},"to":{"value":"2c7929f0-7b7b-4767-b688-a27f6b83cc8c"},"from":{"value":"7e12cfe4-854f-4eaa-86a9-312b188619a7"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"bf3360a0-405c-4b15-8a93-94702074355e"},"ext":null,"units_info":null},"to":{"value":"0e6eb978-4512-4505-bddd-4d019ed7a7cb"},"from":{"value":"b9407086-cd2e-46fa-ba33-172c2941f753"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"53842a17-7ffe-4c55-84b5-3d221c09a453"},"ext":null,"units_info":null},"to":{"value":"7198f0ca-9ed2-4ae0-9bb0-6055acf090e5"},"from":{"value":"1a2750f7-765e-4307-9077-591730e1b3d7"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"ea1c4b6c-09e8-4b17-9202-71b9a10c51d6"},"ext":null,"units_info":null},"to":{"value":"68ad5aef-bd2b-4d20-a250-b4bdbc0d6522"},"from":{"value":"1bb69ffd-e17a-42fe-9610-2ab45ec05918"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"6ab38c7f-c866-4782-afbb-7a6b8eccfc30"},"ext":null,"units_info":null},"to":{"value":"041b05bb-c182-42b9-9358-0426ebce9853"},"from":{"value":"e3cf8c18-e2dc-43a0-8f31-6ddb07cf6599"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"64b560f4-9422-43db-a21f-100f3efb87ab"},"ext":null,"units_info":null},"to":{"value":"b5260c9d-2d43-400a-bee9-eecc9d9d6465"},"from":{"value":"9baccc3b-03b4-4d16-8e7f-e72b40aed605"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"0d0861ca-b4ae-4480-bd9a-796c6c753c57"},"ext":null,"units_info":null},"to":{"value":"850fe97f-e042-4197-8ca3-693e595bd77d"},"from":{"value":"e3609e90-84fd-43a1-a840-803e0041f5f8"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"1c58f4fb-c2aa-4d02-90a8-a1a4e46d12bf"},"ext":null,"units_info":null},"to":{"value":"907795dd-33a5-49d9-b540-4b5d447fbd7b"},"from":{"value":"0952a653-69a1-48b5-9de3-00a3e22b2ada"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"c7c18ecd-a73c-400e-9bf5-7c79342819ac"},"ext":null,"units_info":null},"to":{"value":"4fd3971f-f222-4c77-84ce-cb292fdb1b01"},"from":{"value":"807e523d-a43c-49ba-8410-357c65d9aada"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"8ea984bb-d23e-416b-85db-dbddf4ce4e52"},"ext":null,"units_info":null},"to":{"value":"1a2750f7-765e-4307-9077-591730e1b3d7"},"from":{"value":"b79a0156-f2d8-4678-a817-c03ddbc37601"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"87a623c7-6d26-4e54-b41e-30136e5f6580"},"ext":null,"units_info":null},"to":{"value":"850fe97f-e042-4197-8ca3-693e595bd77d"},"from":{"value":"7a52d27e-cef7-4783-a677-d099eab42693"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"584302cc-c60b-449a-a300-dd803ac85e68"},"ext":null,"units_info":null},"to":{"value":"b4721c4e-647f-4de4-ad4f-17bc7782bf98"},"from":{"value":"4fd3971f-f222-4c77-84ce-cb292fdb1b01"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"2679faca-b446-48cb-bf7f-68e6418bfa11"},"ext":null,"units_info":null},"to":{"value":"fff97d5f-6f8b-4236-b7f7-1f3675a2bc42"},"from":{"value":"90dda615-0431-4b18-aaac-54aac9227f20"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"680b3fc0-40fd-4b99-9a38-a28eb5674546"},"ext":null,"units_info":null},"to":{"value":"f25c4d10-e062-440a-b666-88fe33b9f7b5"},"from":{"value":"9732ddab-fa61-4c4c-b176-ed93ffb878e8"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"f7b4104a-3813-494a-9ebb-b0d7e4c21770"},"ext":null,"units_info":null},"to":{"value":"fff97d5f-6f8b-4236-b7f7-1f3675a2bc42"},"from":{"value":"03de3f59-e8f6-49de-b44a-eae9c74bb271"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"fc111309-97a1-47d8-9e87-7c6e1bff096e"},"ext":null,"units_info":null},"to":{"value":"1af1f873-ede3-44de-bee2-011797fd973f"},"from":{"value":"eb81aa38-94d2-417d-a426-0e8463be3225"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"45309f70-b5ac-48e2-b59a-5fb85fda473d"},"ext":null,"units_info":null},"to":{"value":"9442817c-885b-4d85-9990-23ea201c62a1"},"from":{"value":"fbe92d32-594f-4312-a6e4-2c04937f9a1a"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"dc2f6df8-0b73-4da3-bfe0-1f83de7f7564"},"ext":null,"units_info":null},"to":{"value":"b38a0c7b-b37d-4026-afdc-9ef69faf326c"},"from":{"value":"cd83ffee-33a7-432f-8bd8-0d83f9473178"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"14cef0f2-db3f-4ae3-a3f1-d63df62c2574"},"ext":null,"units_info":null},"to":{"value":"6230e16c-da44-4376-8bb5-6bf917679f1a"},"from":{"value":"b79a0156-f2d8-4678-a817-c03ddbc37601"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"fb73cdc5-9f69-4195-82d3-69c56c51be1a"},"ext":null,"units_info":null},"to":{"value":"119f1d8b-8559-4c7e-b70b-1b7be69c6902"},"from":{"value":"bebe76f7-f299-4272-ac5d-3dc750b2ce87"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"2d608f23-b3fe-469b-a472-23f79dd5dee4"},"ext":null,"units_info":null},"to":{"value":"c369f892-9f64-4fca-ad27-987e501596e0"},"from":{"value":"9442817c-885b-4d85-9990-23ea201c62a1"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"7271e54f-9695-4dda-843f-7ea9885bf61c"},"ext":null,"units_info":null},"to":{"value":"7a52d27e-cef7-4783-a677-d099eab42693"},"from":{"value":"a888f416-15e5-4097-b44a-3220b01169c1"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"ff6354c7-4c0d-45d9-b0c1-4f6c79546f90"},"ext":null,"units_info":null},"to":{"value":"48364fdf-90e3-439d-943d-ed503d49d2c6"},"from":{"value":"7e12cfe4-854f-4eaa-86a9-312b188619a7"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"b9519a41-b9e8-4bd4-b073-ec76a638faee"},"ext":null,"units_info":null},"to":{"value":"9d5953c3-c3da-483f-8685-9a84bf179215"},"from":{"value":"807e523d-a43c-49ba-8410-357c65d9aada"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"a05b97e6-6b7c-4fa8-8d84-7b4e0a95eafb"},"ext":null,"units_info":null},"to":{"value":"3ca9df73-7978-4df8-97bf-56fa68b787ac"},"from":{"value":"feca18b2-4a7b-45f0-8e9b-eaf8e643b622"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"3d09ebf1-1c61-43a1-bd21-29960acaf646"},"ext":null,"units_info":null},"to":{"value":"e3609e90-84fd-43a1-a840-803e0041f5f8"},"from":{"value":"6230e16c-da44-4376-8bb5-6bf917679f1a"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"4707cdf1-8190-442a-955d-20cdd7285618"},"ext":null,"units_info":null},"to":{"value":"7e12cfe4-854f-4eaa-86a9-312b188619a7"},"from":{"value":"19de644e-22af-4729-8a55-a2e7f41ff2f4"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"2ab953ca-61e7-4afe-8511-02ef6f2ef215"},"ext":null,"units_info":null},"to":{"value":"cd83ffee-33a7-432f-8bd8-0d83f9473178"},"from":{"value":"68ad5aef-bd2b-4d20-a250-b4bdbc0d6522"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"4fbd87f2-4d9a-4799-bc61-5d71b98ca63e"},"ext":null,"units_info":null},"to":{"value":"2c7929f0-7b7b-4767-b688-a27f6b83cc8c"},"from":{"value":"9d11e0f0-a3be-4a48-9f3f-c752f31d8443"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"f6d5c5c7-05df-459d-9a1d-a3759f7f14a7"},"ext":null,"units_info":null},"to":{"value":"968fc7b3-2f14-4de5-ad31-502862064e79"},"from":{"value":"ddfc9c5e-f978-4523-84ca-7f3bff484639"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"053a2d0e-ae99-404b-b527-4667cd94234a"},"ext":null,"units_info":null},"to":{"value":"19de644e-22af-4729-8a55-a2e7f41ff2f4"},"from":{"value":"b38a0c7b-b37d-4026-afdc-9ef69faf326c"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"34272baa-7481-48c1-a7d2-c614dba61b43"},"ext":null,"units_info":null},"to":{"value":"9d11e0f0-a3be-4a48-9f3f-c752f31d8443"},"from":{"value":"1bb69ffd-e17a-42fe-9610-2ab45ec05918"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"823e4b29-0bfa-412b-a2da-63a5bb7f5bea"},"ext":null,"units_info":null},"to":{"value":"3ca9df73-7978-4df8-97bf-56fa68b787ac"},"from":{"value":"19de644e-22af-4729-8a55-a2e7f41ff2f4"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"a6f625b6-8e1a-477e-9843-0b43a4f2d407"},"ext":null,"units_info":null},"to":{"value":"b6422506-c3b9-4461-badd-e3c04667ee0f"},"from":{"value":"7a52d27e-cef7-4783-a677-d099eab42693"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"93158e94-6f7a-462b-aec7-3ce93c2c21ef"},"ext":null,"units_info":null},"to":{"value":"c369f892-9f64-4fca-ad27-987e501596e0"},"from":{"value":"ddabdfef-209e-45b1-b4d3-33c7701b8702"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"f9ac2f79-c90f-4206-8b98-438703ca08d5"},"ext":null,"units_info":null},"to":{"value":"f1f42a05-e08e-4511-8cb6-0d4376f08905"},"from":{"value":"9732ddab-fa61-4c4c-b176-ed93ffb878e8"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"9b5be232-cd9c-432f-8712-ec957fdba47a"},"ext":null,"units_info":null},"to":{"value":"832a6569-e17d-4037-b8f8-4fe974a903b0"},"from":{"value":"2db4e2d8-c0ac-4201-8d81-f5ee7493bb6f"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"f9418704-c032-452e-9522-67018bbe6b38"},"ext":null,"units_info":null},"to":{"value":"7a52d27e-cef7-4783-a677-d099eab42693"},"from":{"value":"7198f0ca-9ed2-4ae0-9bb0-6055acf090e5"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"fba9015a-7ae6-4db4-baf1-fd440aefd172"},"ext":null,"units_info":null},"to":{"value":"ddabdfef-209e-45b1-b4d3-33c7701b8702"},"from":{"value":"41a4070e-75db-4e0b-96a5-2394fb58217b"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"e2097e86-053d-4fff-8518-043ae6e3a9b7"},"ext":null,"units_info":null},"to":{"value":"b6422506-c3b9-4461-badd-e3c04667ee0f"},"from":{"value":"e3609e90-84fd-43a1-a840-803e0041f5f8"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"94350b4c-c1af-45e2-a010-690d3e377b2d"},"ext":null,"units_info":null},"to":{"value":"b9407086-cd2e-46fa-ba33-172c2941f753"},"from":{"value":"d76a05da-dca0-45bd-8fb4-6ad9e732d09b"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"4413ef8e-798a-4917-86b4-eff4b31facd1"},"ext":null,"units_info":null},"to":{"value":"ff8cb561-d277-4ed7-a228-32a618645b37"},"from":{"value":"68ad5aef-bd2b-4d20-a250-b4bdbc0d6522"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"8209784e-f0b8-4bd1-83a1-830f7a293447"},"ext":null,"units_info":null},"to":{"value":"ddabdfef-209e-45b1-b4d3-33c7701b8702"},"from":{"value":"9d11e0f0-a3be-4a48-9f3f-c752f31d8443"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"b57edc8a-f720-4653-89a5-b51fee6fcc32"},"ext":null,"units_info":null},"to":{"value":"6c4f0ae4-e893-4ffd-9def-391110e10cba"},"from":{"value":"0e6eb978-4512-4505-bddd-4d019ed7a7cb"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"1f733ea7-7979-4d2b-93c8-8504fca1a264"},"ext":null,"units_info":null},"to":{"value":"fbe92d32-594f-4312-a6e4-2c04937f9a1a"},"from":{"value":"f356ec1b-e66e-450b-80ef-c8cfe2e70802"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"1395acba-ec43-4f08-9409-7a9a92574bdc"},"ext":null,"units_info":null},"to":{"value":"ab966bc8-7742-44f9-9993-8d7b399c418b"},"from":{"value":"ebc194c0-e418-403a-8ce8-c182183ef1d3"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"0d3710c6-e07b-4d1c-a51c-9c50dfc67a26"},"ext":null,"units_info":null},"to":{"value":"29a90993-fff2-4706-9ecb-8f4130cc083b"},"from":{"value":"ce6350dc-73c2-444e-ba12-75ca2bd82b61"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"0e0b6f88-499f-4569-a9dc-ab50d3c00b3a"},"ext":null,"units_info":null},"to":{"value":"29a90993-fff2-4706-9ecb-8f4130cc083b"},"from":{"value":"90dda615-0431-4b18-aaac-54aac9227f20"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"24e1be15-92f9-41f1-b997-3da026dd6ddd"},"ext":null,"units_info":null},"to":{"value":"9442817c-885b-4d85-9990-23ea201c62a1"},"from":{"value":"f25c4d10-e062-440a-b666-88fe33b9f7b5"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"f3994ee0-ca79-4bed-99e7-44c0f0ca6e0b"},"ext":null,"units_info":null},"to":{"value":"d76a05da-dca0-45bd-8fb4-6ad9e732d09b"},"from":{"value":"ff8cb561-d277-4ed7-a228-32a618645b37"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"40bffd77-0506-4beb-941b-1da8f76b43a3"},"ext":null,"units_info":null},"to":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"from":{"value":"e3cf8c18-e2dc-43a0-8f31-6ddb07cf6599"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"a2eaaabc-dc8f-4517-a7f2-68a0c2c6787e"},"ext":null,"units_info":null},"to":{"value":"218deb6c-bd8e-43d2-9310-51a6e8ec9955"},"from":{"value":"907795dd-33a5-49d9-b540-4b5d447fbd7b"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"f7484d83-8026-4bca-aaab-be24061d5770"},"ext":null,"units_info":null},"to":{"value":"bc538156-a62e-4493-83dd-87bfa31c55ec"},"from":{"value":"48364fdf-90e3-439d-943d-ed503d49d2c6"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"5e38c337-3968-40fd-9f35-947d8def2f41"},"ext":null,"units_info":null},"to":{"value":"4fd3971f-f222-4c77-84ce-cb292fdb1b01"},"from":{"value":"9b183c0a-7bce-4253-a0b1-f49fb21250bf"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"fe16825d-0dd7-4e7e-9617-fe9cae16d9b1"},"ext":null,"units_info":null},"to":{"value":"f38e5eca-680c-485c-b314-bb0ae5d4956e"},"from":{"value":"b38a0c7b-b37d-4026-afdc-9ef69faf326c"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"internal":{"uuid":{"value":"bcf416e6-d1a3-40c7-a77b-3991a5228f30"},"ext":null,"units_info":null},"to":{"value":"5e92de8e-4e6a-439a-a8de-0a724beca21a"},"from":{"value":"bebe76f7-f299-4272-ac5d-3dc750b2ce87"},"__metadata__":{"module":"PowerSystems","type":"Arc"}},{"base_power":713.5,"prime_mover_type":"WT","rating":1.0,"services":[],"bus":{"value":"041b05bb-c182-42b9-9358-0426ebce9853"},"available":true,"name":"122_WIND_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"48401e5f-01e0-4f22-b8ab-9969bd3e9dd1"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.0,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"9d5953c3-c3da-483f-8685-9a84bf179215"},"available":true,"name":"324_PV_3","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"119346f7-a5a9-404d-af75-37bbdbe97cf0"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":94.1,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"850fe97f-e042-4197-8ca3-693e595bd77d"},"available":true,"name":"312_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"8390920e-77c2-4f05-ace4-66edfa49f0fb"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":25.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"2db4e2d8-c0ac-4201-8d81-f5ee7493bb6f"},"available":true,"name":"102_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"b238aded-5b35-4c15-ba26-7bed6bff5f47"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":25.9,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"9baccc3b-03b4-4d16-8e7f-e72b40aed605"},"available":true,"name":"101_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"b0066576-2027-4ede-92a8-04bd30f4c69f"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"9d5953c3-c3da-483f-8685-9a84bf179215"},"available":true,"name":"324_PV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"3fa2849f-e42d-4eaf-bc76-49dc45b571b9"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":93.3,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_PV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"5620f535-3a25-4cda-9e68-cac7d48544ef"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":26.8,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"832a6569-e17d-4037-b8f8-4fe974a903b0"},"available":true,"name":"104_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"2fb76f59-4a71-4421-959d-3edb9e193a67"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":26.7,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"9baccc3b-03b4-4d16-8e7f-e72b40aed605"},"available":true,"name":"101_PV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"9b1482bf-38fa-45e9-8db4-e6dabfdce4bb"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":148.3,"prime_mover_type":"WT","rating":1.0,"services":[],"bus":{"value":"7a52d27e-cef7-4783-a677-d099eab42693"},"available":true,"name":"309_WIND_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"7413e23c-2c6e-40c5-a951-574d5e5ce5ea"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"e3609e90-84fd-43a1-a840-803e0041f5f8"},"available":true,"name":"310_PV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"b7d4abea-a8fb-43c1-ab81-8b55ceac81f3"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":93.6,"prime_mover_type":"PVe","rating":1.9999999999999998,"services":[],"bus":{"value":"19de644e-22af-4729-8a55-a2e7f41ff2f4"},"available":true,"name":"113_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"32490097-f142-411a-8909-ba0801369fa8"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":799.1,"prime_mover_type":"WT","rating":1.0,"services":[],"bus":{"value":"df1bf7dc-30f1-41ef-b15b-d4d634a794ac"},"available":true,"name":"317_WIND_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"4dd5f2fb-d208-4def-acff-91a55cd4d8a6"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"feca18b2-4a7b-45f0-8e9b-eaf8e643b622"},"available":true,"name":"314_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"fc16c782-5527-43cb-ba5d-42b65aad7fe5"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":49.7,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"9d5953c3-c3da-483f-8685-9a84bf179215"},"available":true,"name":"324_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"1911d4ab-6fcc-4cb8-bf1c-a9d18b9b100a"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":61.5,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"03de3f59-e8f6-49de-b44a-eae9c74bb271"},"available":true,"name":"103_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"60565515-f160-4808-8b4b-8a0ab21e743e"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":847.0,"prime_mover_type":"WT","rating":1.0,"services":[],"bus":{"value":"a888f416-15e5-4097-b44a-3220b01169c1"},"available":true,"name":"303_WIND_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"be054c42-aaa6-49ba-82a9-524b1b12a2d0"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"feca18b2-4a7b-45f0-8e9b-eaf8e643b622"},"available":true,"name":"314_PV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"69c3bd8d-a88b-495f-9c6f-57a23b10ea19"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":25.3,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"2db4e2d8-c0ac-4201-8d81-f5ee7493bb6f"},"available":true,"name":"102_PV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"070830a7-9980-411e-bcbc-ebddb511dca1"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":92.7,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"feca18b2-4a7b-45f0-8e9b-eaf8e643b622"},"available":true,"name":"314_PV_3","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"d2689f31-24da-4739-b911-6a533356694a"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"ebc194c0-e418-403a-8ce8-c182183ef1d3"},"available":true,"name":"320_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"6e8a3d18-4a24-40d0-913f-3d3b925e9e1a"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":26.2,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"9baccc3b-03b4-4d16-8e7f-e72b40aed605"},"available":true,"name":"101_PV_3","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"84ad1bde-f864-4e50-b6d9-691d0fcc0975"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":188.2,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"9c9ad013-9376-4a47-b509-adce298f96a2"},"available":true,"name":"319_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"13155778-5ccf-4ef1-bca9-d12cbc2c6f31"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"feca18b2-4a7b-45f0-8e9b-eaf8e643b622"},"available":true,"name":"314_PV_4","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"d3e913fc-0335-44a4-a352-f84a6fd4ee76"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":51.7,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"e3609e90-84fd-43a1-a840-803e0041f5f8"},"available":true,"name":"310_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"33538e19-2e0b-4a59-bf22-bfe621bda8f9"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":125.1,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"7e12cfe4-854f-4eaa-86a9-312b188619a7"},"available":true,"name":"215_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"6c8757db-7072-4677-a2e7-177c26ba17f0"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":95.1,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"5d34431e-11fd-495f-8eeb-c852a17d141a"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":25.8,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"9baccc3b-03b4-4d16-8e7f-e72b40aed605"},"available":true,"name":"101_PV_4","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"f93ac3d2-7be0-47e8-8ae3-f71a4c0e9334"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"base_power":66.6,"prime_mover_type":"PVe","rating":2.0,"services":[],"bus":{"value":"907795dd-33a5-49d9-b540-4b5d447fbd7b"},"available":true,"name":"119_PV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableDispatch"},"internal":{"uuid":{"value":"a0d3da4f-0de2-4cbe-83e2-7e6e9ca3c507"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.0},"ext":{},"operation_cost":{"curtailment_cost":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"RenewableGenerationCost"}},"reactive_power":0.0},{"load_response":0.0,"name":"1","internal":{"uuid":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":null,"units_info":null},"ext":{},"peak_active_power":0.0,"peak_reactive_power":0.0,"__metadata__":{"module":"PowerSystems","type":"Area"}},{"load_response":0.0,"name":"2","internal":{"uuid":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":null,"units_info":null},"ext":{},"peak_active_power":0.0,"peak_reactive_power":0.0,"__metadata__":{"module":"PowerSystems","type":"Area"}},{"load_response":0.0,"name":"3","internal":{"uuid":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":null,"units_info":null},"ext":{},"peak_active_power":0.0,"peak_reactive_power":0.0,"__metadata__":{"module":"PowerSystems","type":"Area"}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"C31-2","reactive_power_flow":0.0,"arc":{"value":"5e38c337-3968-40fd-9f35-947d8def2f41"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"65edc399-e220-43ea-9f77-6a799d135202"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.104,"b":{"from":0.014,"to":0.014},"r":0.027,"available":true,"name":"B8","reactive_power_flow":0.0,"arc":{"value":"0ef0fe7f-27d0-4d47-a58f-261ebd1258ad"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"6de79e8b-470e-4cb2-9a1e-38202dce2ffa"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.052,"b":{"from":0.0545,"to":0.0545},"r":0.007,"available":true,"name":"B26","reactive_power_flow":0.0,"arc":{"value":"1fe91d03-551c-4f53-9f38-54b3b378a54f"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"273a71ee-ea28-41ac-99d2-60866231c23c"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.04,"b":{"from":0.0415,"to":0.0415},"r":0.005,"available":true,"name":"A32-2","reactive_power_flow":0.0,"arc":{"value":"a2eaaabc-dc8f-4517-a7f2-68a0c2c6787e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"74eadb18-1119-4b94-b12c-2120b11f78a4"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.097,"b":{"from":0.1015,"to":0.1015},"r":0.012,"available":true,"name":"CA-1","reactive_power_flow":0.0,"arc":{"value":"0d3710c6-e07b-4d1c-a51c-9c50dfc67a26"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"37f420a8-0295-4b17-8e5a-a8450ca90b39"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.192,"b":{"from":0.026,"to":0.026},"r":0.05,"available":true,"name":"A5","reactive_power_flow":0.0,"arc":{"value":"3639b09d-b705-415b-abc8-666787ef3c3f"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e094d046-58f8-466c-b682-c502e412059c"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.068,"b":{"from":0.071,"to":0.071},"r":0.009,"available":true,"name":"B34","reactive_power_flow":0.0,"arc":{"value":"f7484d83-8026-4bca-aaab-be24061d5770"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"2b74fc57-ceae-463f-8b31-e682dc6e4f9d"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.042,"b":{"from":0.044,"to":0.044},"r":0.005,"available":true,"name":"B19","reactive_power_flow":0.0,"arc":{"value":"fb73cdc5-9f69-4195-82d3-69c56c51be1a"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"5235ae89-5a0f-44bf-b4fd-954a4b5086e8"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"B31-2","reactive_power_flow":0.0,"arc":{"value":"964ba18f-6717-4bef-9d79-7c263137d785"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"3b3122e8-262b-44cf-b35d-541a5d2a7773"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.105,"b":{"from":0.1105,"to":0.1105},"r":0.014,"available":true,"name":"C30","reactive_power_flow":0.0,"arc":{"value":"ce20dcf3-5616-449d-a2a9-020f80857e1b"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"4d10ffc4-361f-465e-8574-b65312555479"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"B27","reactive_power_flow":0.0,"arc":{"value":"cb24e3fd-473e-413e-a404-ee4e99b9c5d0"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"80862dff-d4a1-4bc5-846e-2af130284904"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.097,"b":{"from":0.1015,"to":0.1015},"r":0.012,"available":true,"name":"A21","reactive_power_flow":0.0,"arc":{"value":"94350b4c-c1af-45e2-a010-690d3e377b2d"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"6dde6a26-359d-4a55-8e1b-1d8618a6285a"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.04,"b":{"from":0.0415,"to":0.0415},"r":0.005,"available":true,"name":"A32-1","reactive_power_flow":0.0,"arc":{"value":"a2eaaabc-dc8f-4517-a7f2-68a0c2c6787e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"7405ae1f-1199-49de-92c9-e9185aea995e"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.014,"b":{"from":0.015,"to":0.015},"r":0.002,"available":true,"name":"B29","reactive_power_flow":0.0,"arc":{"value":"b57edc8a-f720-4653-89a5-b51fee6fcc32"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"f7b5908b-5df6-4920-a219-fc57e518ac44"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.048,"b":{"from":0.05,"to":0.05},"r":0.006,"available":true,"name":"A18","reactive_power_flow":0.0,"arc":{"value":"053a2d0e-ae99-404b-b527-4667cd94234a"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"28bb43bc-0a47-4ec0-96f0-1727a53d9f5f"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.192,"b":{"from":0.026,"to":0.026},"r":0.05,"available":true,"name":"C5","reactive_power_flow":0.0,"arc":{"value":"5b1b963b-d768-4cd1-a423-0bb80c7b524e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"b0fdb6ea-dd45-42f7-9b39-4bf0eed57748"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.165,"b":{"from":0.0225,"to":0.0225},"r":0.043,"available":true,"name":"C13-2","reactive_power_flow":0.0,"arc":{"value":"415066d5-bd65-4ef3-8b34-65cfee4b29e9"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"4e33a0ec-4651-480a-8a97-392b8b44520f"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.017,"b":{"from":0.018,"to":0.018},"r":0.002,"available":true,"name":"C24","reactive_power_flow":0.0,"arc":{"value":"35777c9e-19a5-449d-8e1b-47b694fedae4"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"1277601e-c0e4-4b21-867a-22eff41aa947"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.023,"b":{"from":0.0245,"to":0.0245},"r":0.003,"available":true,"name":"C28","reactive_power_flow":0.0,"arc":{"value":"94789911-8228-4b3c-8918-5338f5b20ebd"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"9f9443f3-8b31-4740-b4db-e89bf18f5490"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.014,"b":{"from":0.015,"to":0.015},"r":0.002,"available":true,"name":"A29","reactive_power_flow":0.0,"arc":{"value":"40bffd77-0506-4beb-941b-1da8f76b43a3"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"b8549bed-50c3-4c4a-84ab-a31a1e0d4e7e"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.085,"b":{"from":0.0115,"to":0.0115},"r":0.022,"available":true,"name":"A3","reactive_power_flow":0.0,"arc":{"value":"64b560f4-9422-43db-a21f-100f3efb87ab"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"0e1ea10b-f26f-4a92-a9dd-fcc92b96ef76"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.161,"b":{"from":0.022,"to":0.022},"r":0.042,"available":true,"name":"AB1","reactive_power_flow":0.0,"arc":{"value":"34272baa-7481-48c1-a7d2-c614dba61b43"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"c1c00d01-958d-4265-9b5d-e67931c98507"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.075,"b":{"from":0.079,"to":0.079},"r":0.01,"available":true,"name":"AB2","reactive_power_flow":0.0,"arc":{"value":"4707cdf1-8190-442a-955d-20cdd7285618"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"ba6adaf7-2ed1-4e05-9456-5ba6c881e453"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"C27","reactive_power_flow":0.0,"arc":{"value":"1c35e72f-8b53-40a6-a408-49f546fd0728"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"0ae822ae-e095-4498-a69d-7f1b7736591c"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":7.22,"services":[],"x":0.009,"b":{"from":0.0,"to":0.0},"r":0.0,"available":true,"name":"C35","reactive_power_flow":0.0,"arc":{"value":"2925fedc-d8dd-4ac8-9230-a86380161b1a"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"b7bc91f6-0a40-4a5a-a581-8dbc3918943b"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.049,"b":{"from":0.0515,"to":0.0515},"r":0.006,"available":true,"name":"A25-1","reactive_power_flow":0.0,"arc":{"value":"0e0b6f88-499f-4569-a9dc-ab50d3c00b3a"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"2caa1e96-8a4e-4d6d-90fb-6ee88d2a5927"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.192,"b":{"from":0.026,"to":0.026},"r":0.05,"available":true,"name":"B5","reactive_power_flow":0.0,"arc":{"value":"680b3fc0-40fd-4b99-9a38-a28eb5674546"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"318f2d7c-b2d5-4441-a051-3be054ab75ea"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.211,"b":{"from":0.0285,"to":0.0285},"r":0.055,"available":true,"name":"B2","reactive_power_flow":0.0,"arc":{"value":"f5026712-bc50-452a-9656-98178e7a6beb"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"96691f9c-07b4-4574-801f-fb08db3be187"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"B31-1","reactive_power_flow":0.0,"arc":{"value":"964ba18f-6717-4bef-9d79-7c263137d785"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"66d75be2-871c-4303-a7ac-1aadfdc76da0"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.048,"b":{"from":0.05,"to":0.05},"r":0.006,"available":true,"name":"C20","reactive_power_flow":0.0,"arc":{"value":"6f1fe10a-8a1b-4ca8-8a92-c06e1a47f057"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"62325f89-0e60-4fbf-9e97-4385dfef74ed"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.059,"b":{"from":0.041,"to":0.041},"r":0.005,"available":true,"name":"B23","reactive_power_flow":0.0,"arc":{"value":"f3887953-1a05-477e-9c10-807c3484e569"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"02c59daf-9c69-4a1e-80ec-0b52b7147170"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.023,"b":{"from":0.0245,"to":0.0245},"r":0.003,"available":true,"name":"A28","reactive_power_flow":0.0,"arc":{"value":"1c58f4fb-c2aa-4d02-90a8-a1a4e46d12bf"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"2921b9f0-37c9-49ff-b241-76df15b06303"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.042,"b":{"from":0.044,"to":0.044},"r":0.005,"available":true,"name":"A19","reactive_power_flow":0.0,"arc":{"value":"fe16825d-0dd7-4e7e-9617-fe9cae16d9b1"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"fc835d17-48c3-4f04-9196-2106f949821b"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.088,"b":{"from":0.012,"to":0.012},"r":0.023,"available":true,"name":"C9","reactive_power_flow":0.0,"arc":{"value":"3d09ebf1-1c61-43a1-bd21-29960acaf646"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"416f8303-2e3d-484b-b783-70a56c392d2e"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.014,"b":{"from":0.2305,"to":0.2305},"r":0.003,"available":true,"name":"C1","reactive_power_flow":0.0,"arc":{"value":"8ea984bb-d23e-416b-85db-dbddf4ce4e52"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"c0fa4c2d-91d4-48c8-a263-00779d6979fd"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.211,"b":{"from":0.0285,"to":0.0285},"r":0.055,"available":true,"name":"C2","reactive_power_flow":0.0,"arc":{"value":"9d52b3a0-6913-4fa4-86db-df367de195cf"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"17f07f10-1ec8-4468-b0ca-92911a6187b7"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.049,"b":{"from":0.0515,"to":0.0515},"r":0.006,"available":true,"name":"B25-1","reactive_power_flow":0.0,"arc":{"value":"ff6354c7-4c0d-45d9-b0c1-4f6c79546f90"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"3655737e-e79a-41b2-8a20-e707deb7bef0"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.088,"b":{"from":0.012,"to":0.012},"r":0.023,"available":true,"name":"A9","reactive_power_flow":0.0,"arc":{"value":"3347111a-6dc6-475d-bf81-a3aa36f886fa"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"d10f22e8-e877-4c53-900c-2ac063f94aed"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.061,"b":{"from":0.0085,"to":0.0085},"r":0.016,"available":true,"name":"C11","reactive_power_flow":0.0,"arc":{"value":"ebbbb3f8-d763-4c90-a89f-7e8379791ca1"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"57ac083a-5407-4480-a5b3-e8fb89f63759"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.042,"b":{"from":0.044,"to":0.044},"r":0.005,"available":true,"name":"C19","reactive_power_flow":0.0,"arc":{"value":"30e2bfbc-a19f-415f-9c79-93143d96b8fd"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"8793b4d1-f13f-434b-8e6c-759d43a4cac6"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.059,"b":{"from":0.041,"to":0.041},"r":0.005,"available":true,"name":"C23","reactive_power_flow":0.0,"arc":{"value":"a05b97e6-6b7c-4fa8-8d84-7b4e0a95eafb"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"2dbdd80d-6b49-4aa9-9499-87c707405663"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.049,"b":{"from":0.0515,"to":0.0515},"r":0.006,"available":true,"name":"C25-1","reactive_power_flow":0.0,"arc":{"value":"c7c18ecd-a73c-400e-9bf5-7c79342819ac"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e055b409-d514-4fb9-8296-b8bbadc8cbae"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.04,"b":{"from":0.0415,"to":0.0415},"r":0.005,"available":true,"name":"C32-2","reactive_power_flow":0.0,"arc":{"value":"dd886054-5f54-462a-8e7b-9095caad2431"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"67ba0db9-35ed-4653-8e2c-e83be7a445c9"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.048,"b":{"from":0.05,"to":0.05},"r":0.006,"available":true,"name":"B20","reactive_power_flow":0.0,"arc":{"value":"bc6ab113-f1b2-429b-92e7-7c0872e31d0b"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"99f0f732-e419-40a6-a003-93bbb60a5ed0"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.088,"b":{"from":0.012,"to":0.012},"r":0.023,"available":true,"name":"B9","reactive_power_flow":0.0,"arc":{"value":"45309f70-b5ac-48e2-b59a-5fb85fda473d"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"26d7cea9-ab89-4b6f-8bcc-a98788a678ca"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.049,"b":{"from":0.0515,"to":0.0515},"r":0.006,"available":true,"name":"C25-2","reactive_power_flow":0.0,"arc":{"value":"c7c18ecd-a73c-400e-9bf5-7c79342819ac"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"2a21acd4-8634-457f-958a-76f29178d1ab"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.165,"b":{"from":0.0225,"to":0.0225},"r":0.043,"available":true,"name":"C12-1","reactive_power_flow":0.0,"arc":{"value":"aa54b07c-67cb-4378-b672-c30a98257a10"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"0bc2b8b1-41a0-4c06-a644-426fb14f2943"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"A27","reactive_power_flow":0.0,"arc":{"value":"b0ee4e08-87ee-4938-9599-c7b361d84598"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"7932d0e0-c2e4-4954-8f51-bec36ae605cd"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.097,"b":{"from":0.1015,"to":0.1015},"r":0.012,"available":true,"name":"C21","reactive_power_flow":0.0,"arc":{"value":"fa5deab9-5034-4197-be1f-ca7f33abee20"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"96597eb5-ce16-4dd8-9c6f-72d9f306424a"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.068,"b":{"from":0.071,"to":0.071},"r":0.009,"available":true,"name":"A34","reactive_power_flow":0.0,"arc":{"value":"d4feff5d-2c48-4bf2-9cb2-e6504d03d063"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e26668a5-7c6d-4add-908b-c017cf9c0cb1"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.04,"b":{"from":0.0415,"to":0.0415},"r":0.005,"available":true,"name":"B32-1","reactive_power_flow":0.0,"arc":{"value":"e53ed875-e2fb-4702-bb5a-33b0b5fa9509"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"11ae1954-441b-4047-bcfe-9ec3c3ab6669"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.165,"b":{"from":0.0225,"to":0.0225},"r":0.043,"available":true,"name":"A12-1","reactive_power_flow":0.0,"arc":{"value":"2ab953ca-61e7-4afe-8511-02ef6f2ef215"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e5a2ce07-764d-44cf-986c-0ed8f9411c73"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.022,"b":{"from":0.023,"to":0.023},"r":0.003,"available":true,"name":"B33-1","reactive_power_flow":0.0,"arc":{"value":"fc111309-97a1-47d8-9e87-7c6e1bff096e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"9f2ed7d2-9fc4-4297-beff-d8e0d24ea954"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.014,"b":{"from":0.2305,"to":0.2305},"r":0.003,"available":true,"name":"B1","reactive_power_flow":0.0,"arc":{"value":"e855c6ab-1b85-4bf1-bde0-27346c5415b8"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"2830616f-a305-483c-9052-1a8ef33a2d51"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.127,"b":{"from":0.017,"to":0.017},"r":0.033,"available":true,"name":"A4","reactive_power_flow":0.0,"arc":{"value":"9b5be232-cd9c-432f-8712-ec957fdba47a"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"0c975e0e-14bb-4c42-9e56-bfdfe7e83111"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.052,"b":{"from":0.0545,"to":0.0545},"r":0.007,"available":true,"name":"C26","reactive_power_flow":0.0,"arc":{"value":"b9519a41-b9e8-4bd4-b073-ec76a638faee"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"80d78ed1-b452-4822-91a0-9ed5e4efc022"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.127,"b":{"from":0.017,"to":0.017},"r":0.033,"available":true,"name":"B4","reactive_power_flow":0.0,"arc":{"value":"f9ac2f79-c90f-4206-8b98-438703ca08d5"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"2943482b-d046-4c01-9192-af05aba3defb"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.087,"b":{"from":0.091,"to":0.091},"r":0.011,"available":true,"name":"A22","reactive_power_flow":0.0,"arc":{"value":"cc5f00e0-af71-4adb-b5b5-affad1a0b2dd"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"88922162-01e7-4532-8be1-e47f9924b876"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"A31-1","reactive_power_flow":0.0,"arc":{"value":"e5d42067-8e84-459f-a338-6a9263e6bec4"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"82865606-2d21-4aec-996b-961850a09570"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.022,"b":{"from":0.023,"to":0.023},"r":0.003,"available":true,"name":"A33-2","reactive_power_flow":0.0,"arc":{"value":"9207e135-71e6-4428-b74d-a3b8f4d825ee"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"8dfd66fd-8c96-439e-8f17-f9e59b4e4bdb"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.074,"b":{"from":0.0775,"to":0.0775},"r":0.01,"available":true,"name":"AB3","reactive_power_flow":0.0,"arc":{"value":"bf3360a0-405c-4b15-8a93-94702074355e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"8d1bbbb5-ca4c-4b22-a03e-3cd8d8ab3bd6"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.104,"b":{"from":0.014,"to":0.014},"r":0.027,"available":true,"name":"A8","reactive_power_flow":0.0,"arc":{"value":"e443ec53-6122-430a-94a3-66ce166bb17e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"fbee0f84-db58-44a4-96cd-e7d1bb34cbf5"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"A31-2","reactive_power_flow":0.0,"arc":{"value":"e5d42067-8e84-459f-a338-6a9263e6bec4"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"9adacc9b-d31f-4c69-9de0-b1fc7701d6fb"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.022,"b":{"from":0.023,"to":0.023},"r":0.003,"available":true,"name":"C33-2","reactive_power_flow":0.0,"arc":{"value":"1395acba-ec43-4f08-9409-7a9a92574bdc"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"7e43c390-268e-45ef-815c-5be1ff5b7226"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.061,"b":{"from":1.2295,"to":1.2295},"r":0.014,"available":true,"name":"C10","reactive_power_flow":0.0,"arc":{"value":"42652a58-e860-4c50-88a7-580fe3d9aa99"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"d37384d7-e1e9-4343-b73b-07ae098891de"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.104,"b":{"from":0.109,"to":0.109},"r":0.013,"available":true,"name":"CB-1","reactive_power_flow":0.0,"arc":{"value":"fe8f1a8f-5aee-4d44-8c8b-e5292510b083"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e6517ed4-35f9-41e5-a2a9-48c2df5470d9"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.052,"b":{"from":0.0545,"to":0.0545},"r":0.007,"available":true,"name":"A26","reactive_power_flow":0.0,"arc":{"value":"2679faca-b446-48cb-bf7f-68e6418bfa11"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"4203c9f4-ef9a-4500-bfc5-28e2e19bf0a6"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.119,"b":{"from":0.016,"to":0.016},"r":0.031,"available":true,"name":"A6","reactive_power_flow":0.0,"arc":{"value":"6f65c55b-c4cf-4235-95ca-7f93bc46b5c9"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"54963dff-c1a5-4df2-985a-2dd95001686c"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.022,"b":{"from":0.023,"to":0.023},"r":0.003,"available":true,"name":"C33-1","reactive_power_flow":0.0,"arc":{"value":"1395acba-ec43-4f08-9409-7a9a92574bdc"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"c2ec495c-77f8-43ea-b82c-70e40565decf"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.097,"b":{"from":0.1015,"to":0.1015},"r":0.012,"available":true,"name":"B21","reactive_power_flow":0.0,"arc":{"value":"d37f0f00-6540-40d7-ad0a-e99442d865da"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"8f228b00-3adf-4a3b-9ecc-a56f231516a3"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.014,"b":{"from":0.015,"to":0.015},"r":0.002,"available":true,"name":"C29","reactive_power_flow":0.0,"arc":{"value":"04ca3a2f-8313-4f46-8fe3-90b5fa43dff4"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"646175f8-0d28-4b23-9ba4-d896d52f8f53"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.127,"b":{"from":0.017,"to":0.017},"r":0.033,"available":true,"name":"C4","reactive_power_flow":0.0,"arc":{"value":"53842a17-7ffe-4c55-84b5-3d221c09a453"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"42d482f2-1dcb-4c68-8dfb-e97a209d91ea"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.048,"b":{"from":0.05,"to":0.05},"r":0.006,"available":true,"name":"C18","reactive_power_flow":0.0,"arc":{"value":"afaae3da-5c45-47e2-bf77-5e66955a0320"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"1a669f41-a543-4add-a4c3-18467e99a85d"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.049,"b":{"from":0.0515,"to":0.0515},"r":0.006,"available":true,"name":"A25-2","reactive_power_flow":0.0,"arc":{"value":"0e0b6f88-499f-4569-a9dc-ab50d3c00b3a"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"a57bee53-00e8-42bd-b1ea-e32724a06bc0"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.087,"b":{"from":0.091,"to":0.091},"r":0.011,"available":true,"name":"B22","reactive_power_flow":0.0,"arc":{"value":"bae254ca-3d86-4631-9017-14a8ee5cfd6f"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"af3a9712-ecb4-4ccb-b19a-980aa2df080f"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.014,"b":{"from":0.2305,"to":0.2305},"r":0.003,"available":true,"name":"A1","reactive_power_flow":0.0,"arc":{"value":"632f1b8c-c678-4aff-946a-68cf03bfa7d8"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e1c349fc-a5fb-4d46-a348-256f72bdb756"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.105,"b":{"from":0.1105,"to":0.1105},"r":0.014,"available":true,"name":"B30","reactive_power_flow":0.0,"arc":{"value":"06c4fd75-9b1f-4559-a7f9-726e1706b222"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"3492f4e2-da9a-4808-a91d-791dd77dbc62"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.061,"b":{"from":0.0085,"to":0.0085},"r":0.016,"available":true,"name":"B11","reactive_power_flow":0.0,"arc":{"value":"7b110b62-6b5c-4a58-b959-81051f326e94"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e94ae525-5f74-4ed3-87b5-a00bba726cff"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.085,"b":{"from":0.0115,"to":0.0115},"r":0.022,"available":true,"name":"C3","reactive_power_flow":0.0,"arc":{"value":"14cef0f2-db3f-4ae3-a3f1-d63df62c2574"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"ac652fa4-12f0-4a88-b112-3d5c1adf74e2"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.022,"b":{"from":0.023,"to":0.023},"r":0.003,"available":true,"name":"A33-1","reactive_power_flow":0.0,"arc":{"value":"9207e135-71e6-4428-b74d-a3b8f4d825ee"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"69523f57-25ce-4f49-8699-b6a3de42e276"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.165,"b":{"from":0.0225,"to":0.0225},"r":0.043,"available":true,"name":"B13-2","reactive_power_flow":0.0,"arc":{"value":"f53ea93d-4950-4a93-b3fc-f44311c82764"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"ec5158c7-2c92-4053-897e-9e57bd431045"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.026,"b":{"from":0.0275,"to":0.0275},"r":0.003,"available":true,"name":"C31-1","reactive_power_flow":0.0,"arc":{"value":"5e38c337-3968-40fd-9f35-947d8def2f41"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"8a54dc2a-22ef-498c-91c2-d2ecb59955ae"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.048,"b":{"from":0.05,"to":0.05},"r":0.006,"available":true,"name":"A20","reactive_power_flow":0.0,"arc":{"value":"fbed7f83-7116-4bcf-9c92-f67abff75202"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"79ea1dfa-c8ae-441c-a28c-acbcfde13fac"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.165,"b":{"from":0.0225,"to":0.0225},"r":0.043,"available":true,"name":"B12-1","reactive_power_flow":0.0,"arc":{"value":"fba9015a-7ae6-4db4-baf1-fd440aefd172"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"a512f3ff-7646-439f-9840-58c49eb7d381"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.085,"b":{"from":0.0115,"to":0.0115},"r":0.022,"available":true,"name":"B3","reactive_power_flow":0.0,"arc":{"value":"1f733ea7-7979-4d2b-93c8-8504fca1a264"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"00cb3cf4-60ae-4195-bd01-3d7f7349a7b9"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.017,"b":{"from":0.018,"to":0.018},"r":0.002,"available":true,"name":"B24","reactive_power_flow":0.0,"arc":{"value":"db959349-6d2c-49f3-9ad0-c0c8146786f8"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"0974bc68-515e-4980-a7f7-6e59c85279e8"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.211,"b":{"from":0.0285,"to":0.0285},"r":0.055,"available":true,"name":"A2","reactive_power_flow":0.0,"arc":{"value":"d3266471-01ba-47e8-8d92-b71ce6abc254"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"1b8120d1-4706-4548-bdc3-2b6b6f852653"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.119,"b":{"from":0.016,"to":0.016},"r":0.031,"available":true,"name":"B6","reactive_power_flow":0.0,"arc":{"value":"8209784e-f0b8-4bd1-83a1-830f7a293447"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"50ec5be4-66e5-43d3-84d2-e85a7877f93a"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.165,"b":{"from":0.0225,"to":0.0225},"r":0.043,"available":true,"name":"A13-2","reactive_power_flow":0.0,"arc":{"value":"4413ef8e-798a-4917-86b4-eff4b31facd1"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e89eda5f-c1ce-4b08-832a-6a24c30f122f"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.023,"b":{"from":0.0245,"to":0.0245},"r":0.003,"available":true,"name":"B28","reactive_power_flow":0.0,"arc":{"value":"f6d5c5c7-05df-459d-9a1d-a3759f7f14a7"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"2e2ac852-d654-4dcb-8a4b-3b08d4b57290"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.059,"b":{"from":0.041,"to":0.041},"r":0.005,"available":true,"name":"A23","reactive_power_flow":0.0,"arc":{"value":"4bdf53ed-64d3-4fbd-879b-67bf509b9ad4"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"7bdc382e-b53b-4512-ba6d-feff23df24c9"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.104,"b":{"from":0.014,"to":0.014},"r":0.027,"available":true,"name":"C8","reactive_power_flow":0.0,"arc":{"value":"f9418704-c032-452e-9522-67018bbe6b38"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"2f3e00fb-8ce0-4b9c-af74-6b43250f70d7"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.04,"b":{"from":0.0415,"to":0.0415},"r":0.005,"available":true,"name":"B32-2","reactive_power_flow":0.0,"arc":{"value":"e53ed875-e2fb-4702-bb5a-33b0b5fa9509"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"61a6fe35-70af-49aa-96de-6638d31268c9"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.017,"b":{"from":0.018,"to":0.018},"r":0.002,"available":true,"name":"A24","reactive_power_flow":0.0,"arc":{"value":"113a39cd-96f5-4e25-b6d2-b798292e6c2e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"43f2053a-52f5-4cf1-a6a0-741edc026c31"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.022,"b":{"from":0.023,"to":0.023},"r":0.003,"available":true,"name":"B33-2","reactive_power_flow":0.0,"arc":{"value":"fc111309-97a1-47d8-9e87-7c6e1bff096e"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"014e8883-eda8-4f7b-8554-328e04540b94"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.105,"b":{"from":0.1105,"to":0.1105},"r":0.014,"available":true,"name":"A30","reactive_power_flow":0.0,"arc":{"value":"6ab38c7f-c866-4782-afbb-7a6b8eccfc30"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"0b99b89a-fcf2-418a-b80a-7637db043456"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.061,"b":{"from":1.2295,"to":1.2295},"r":0.014,"available":true,"name":"B10","reactive_power_flow":0.0,"arc":{"value":"24e1be15-92f9-41f1-b997-3da026dd6ddd"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"609eb554-e794-4e30-b0f9-b4ec201e7c21"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.049,"b":{"from":0.0515,"to":0.0515},"r":0.006,"available":true,"name":"B25-2","reactive_power_flow":0.0,"arc":{"value":"ff6354c7-4c0d-45d9-b0c1-4f6c79546f90"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"e5ee27e9-079f-4579-96be-690ed2c5cf86"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.061,"b":{"from":1.2295,"to":1.2295},"r":0.014,"available":true,"name":"A10","reactive_power_flow":0.0,"arc":{"value":"607803f1-5143-4551-a10a-c7faefaa6a3a"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"6add6f77-c6e5-4124-b78f-552c082deeac"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.087,"b":{"from":0.091,"to":0.091},"r":0.011,"available":true,"name":"C22","reactive_power_flow":0.0,"arc":{"value":"0454e154-6332-4d67-814e-4916b729c664"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"c1ee4604-b098-4fa2-87e7-d7a1d656a237"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.119,"b":{"from":0.016,"to":0.016},"r":0.031,"available":true,"name":"C6","reactive_power_flow":0.0,"arc":{"value":"7271e54f-9695-4dda-843f-7ea9885bf61c"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"c9a7d8df-6a0f-4747-b024-fc85923b6513"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":1.75,"services":[],"x":0.061,"b":{"from":0.0085,"to":0.0085},"r":0.016,"available":true,"name":"A11","reactive_power_flow":0.0,"arc":{"value":"ea1c4b6c-09e8-4b17-9202-71b9a10c51d6"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"1b7fc8bc-0e80-4d64-b8da-53c3842df95d"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.068,"b":{"from":0.071,"to":0.071},"r":0.009,"available":true,"name":"C34","reactive_power_flow":0.0,"arc":{"value":"584302cc-c60b-449a-a300-dd803ac85e68"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"f3ce6e3e-2a23-4b54-8258-1f9d8ac4cb84"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.04,"b":{"from":0.0415,"to":0.0415},"r":0.005,"available":true,"name":"C32-1","reactive_power_flow":0.0,"arc":{"value":"dd886054-5f54-462a-8e7b-9095caad2431"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"01bddf0b-9de6-4df0-906a-2b85a0cce805"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"rating":5.0,"services":[],"x":0.048,"b":{"from":0.05,"to":0.05},"r":0.006,"available":true,"name":"B18","reactive_power_flow":0.0,"arc":{"value":"bcf416e6-d1a3-40c7-a77b-3991a5228f30"},"__metadata__":{"module":"PowerSystems","type":"Line"},"internal":{"uuid":{"value":"edf11ae8-40c8-45a7-9810-c0c03a5d10ca"},"ext":null,"units_info":null},"ext":{},"active_power_flow":0.0,"angle_limits":{"min":-1.57079,"max":1.57079}},{"base_power":100.0,"services":[],"bus":{"value":"9732ddab-fa61-4c4c-b176-ed93ffb878e8"},"available":true,"name":"Bacon","active_power":0.97,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.97,"internal":{"uuid":{"value":"50b579f5-b952-4e4e-b8e4-2756187bc241"},"ext":null,"units_info":null},"max_reactive_power":0.2,"ext":{},"reactive_power":0.2},{"base_power":100.0,"services":[],"bus":{"value":"2db4e2d8-c0ac-4201-8d81-f5ee7493bb6f"},"available":true,"name":"Adams","active_power":0.97,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.97,"internal":{"uuid":{"value":"10a3c6a1-6333-48b1-a79c-3a89be892d75"},"ext":null,"units_info":null},"max_reactive_power":0.2,"ext":{},"reactive_power":0.2},{"base_power":100.0,"services":[],"bus":{"value":"f25c4d10-e062-440a-b666-88fe33b9f7b5"},"available":true,"name":"Bajer","active_power":1.36,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.36,"internal":{"uuid":{"value":"5acdb2a9-0f48-4394-83c2-6968b6e21c9b"},"ext":null,"units_info":null},"max_reactive_power":0.28,"ext":{},"reactive_power":0.28},{"base_power":100.0,"services":[],"bus":{"value":"03de3f59-e8f6-49de-b44a-eae9c74bb271"},"available":true,"name":"Adler","active_power":1.8,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.8,"internal":{"uuid":{"value":"d0811a6c-ce52-490a-82db-66edff381a03"},"ext":null,"units_info":null},"max_reactive_power":0.37,"ext":{},"reactive_power":0.37},{"base_power":100.0,"services":[],"bus":{"value":"b79a0156-f2d8-4678-a817-c03ddbc37601"},"available":true,"name":"Cabell","active_power":1.08,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.08,"internal":{"uuid":{"value":"9ed8fe62-6862-468a-ac24-8b62fb426fe0"},"ext":null,"units_info":null},"max_reactive_power":0.22,"ext":{},"reactive_power":0.22},{"base_power":100.0,"services":[],"bus":{"value":"f1f42a05-e08e-4511-8cb6-0d4376f08905"},"available":true,"name":"Bailey","active_power":0.74,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.74,"internal":{"uuid":{"value":"47908da6-4351-40ec-b69a-cb1640600c56"},"ext":null,"units_info":null},"max_reactive_power":0.15,"ext":{},"reactive_power":0.15},{"base_power":100.0,"services":[],"bus":{"value":"1bb69ffd-e17a-42fe-9610-2ab45ec05918"},"available":true,"name":"Alder","active_power":1.25,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.25,"internal":{"uuid":{"value":"be8e2b21-4a7a-4999-8021-abd8e1e93f10"},"ext":null,"units_info":null},"max_reactive_power":0.25,"ext":{},"reactive_power":0.25},{"base_power":100.0,"services":[],"bus":{"value":"ff8cb561-d277-4ed7-a228-32a618645b37"},"available":true,"name":"Allen","active_power":1.95,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.95,"internal":{"uuid":{"value":"ebd171ee-97c7-46f0-ac1d-a3aba9d6e393"},"ext":null,"units_info":null},"max_reactive_power":0.4,"ext":{},"reactive_power":0.4},{"base_power":100.0,"services":[],"bus":{"value":"7e12cfe4-854f-4eaa-86a9-312b188619a7"},"available":true,"name":"Barton","active_power":3.17,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":3.17,"internal":{"uuid":{"value":"4c079b57-9658-4242-a5da-e0caa056ab34"},"ext":null,"units_info":null},"max_reactive_power":0.64,"ext":{},"reactive_power":0.64},{"base_power":100.0,"services":[],"bus":{"value":"f356ec1b-e66e-450b-80ef-c8cfe2e70802"},"available":true,"name":"Bach","active_power":1.08,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.08,"internal":{"uuid":{"value":"13c81b99-9aa3-485a-a98b-e93718ed2c4f"},"ext":null,"units_info":null},"max_reactive_power":0.22,"ext":{},"reactive_power":0.22},{"base_power":100.0,"services":[],"bus":{"value":"a888f416-15e5-4097-b44a-3220b01169c1"},"available":true,"name":"Caesar","active_power":1.8,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.8,"internal":{"uuid":{"value":"e961f703-b845-44cd-b47a-256ce92349b8"},"ext":null,"units_info":null},"max_reactive_power":0.37,"ext":{},"reactive_power":0.37},{"base_power":100.0,"services":[],"bus":{"value":"aba3b299-d290-4ad9-831f-0a3aa0cbe752"},"available":true,"name":"Carew","active_power":1.25,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.25,"internal":{"uuid":{"value":"720b8df7-fed0-41f8-a9dd-5d49d3e49e4c"},"ext":null,"units_info":null},"max_reactive_power":0.25,"ext":{},"reactive_power":0.25},{"base_power":100.0,"services":[],"bus":{"value":"fbe92d32-594f-4312-a6e4-2c04937f9a1a"},"available":true,"name":"Bain","active_power":0.71,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.71,"internal":{"uuid":{"value":"dcbf6cf4-0b9c-44e7-99c2-c6b918fa3cd2"},"ext":null,"units_info":null},"max_reactive_power":0.14,"ext":{},"reactive_power":0.14},{"base_power":100.0,"services":[],"bus":{"value":"807e523d-a43c-49ba-8410-357c65d9aada"},"available":true,"name":"Chase","active_power":3.17,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":3.17,"internal":{"uuid":{"value":"20314a10-1019-4b88-a252-b9987aca4a6f"},"ext":null,"units_info":null},"max_reactive_power":0.64,"ext":{},"reactive_power":0.64},{"base_power":100.0,"services":[],"bus":{"value":"8e3afcb3-9e7f-4bee-b476-141963fa7c6f"},"available":true,"name":"Carrel","active_power":1.71,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.71,"internal":{"uuid":{"value":"30b7d7e3-1c7d-4e3a-bdfb-5290d812fc4a"},"ext":null,"units_info":null},"max_reactive_power":0.35,"ext":{},"reactive_power":0.35},{"base_power":100.0,"services":[],"bus":{"value":"cd83ffee-33a7-432f-8bd8-0d83f9473178"},"available":true,"name":"Ali","active_power":1.75,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.75,"internal":{"uuid":{"value":"5be12070-bef4-49d2-a897-845ba673d507"},"ext":null,"units_info":null},"max_reactive_power":0.36,"ext":{},"reactive_power":0.36},{"base_power":100.0,"services":[],"bus":{"value":"e3609e90-84fd-43a1-a840-803e0041f5f8"},"available":true,"name":"Caruso","active_power":1.95,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.95,"internal":{"uuid":{"value":"04db55fc-c92b-47b4-a809-164fa2cb94a0"},"ext":null,"units_info":null},"max_reactive_power":0.4,"ext":{},"reactive_power":0.4},{"base_power":100.0,"services":[],"bus":{"value":"0952a653-69a1-48b5-9de3-00a3e22b2ada"},"available":true,"name":"Asser","active_power":1.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.0,"internal":{"uuid":{"value":"73830efc-6b5b-4d3d-9caa-14b6cdacbf76"},"ext":null,"units_info":null},"max_reactive_power":0.2,"ext":{},"reactive_power":0.2},{"base_power":100.0,"services":[],"bus":{"value":"3ca9df73-7978-4df8-97bf-56fa68b787ac"},"available":true,"name":"Chifa","active_power":1.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.0,"internal":{"uuid":{"value":"bae60d89-0fd5-458d-bb59-0133ed66db39"},"ext":null,"units_info":null},"max_reactive_power":0.2,"ext":{},"reactive_power":0.2},{"base_power":100.0,"services":[],"bus":{"value":"68ad5aef-bd2b-4d20-a250-b4bdbc0d6522"},"available":true,"name":"Alger","active_power":1.71,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.71,"internal":{"uuid":{"value":"7e0d49f2-ff19-43cd-be1c-4e7f068ef9d0"},"ext":null,"units_info":null},"max_reactive_power":0.35,"ext":{},"reactive_power":0.35},{"base_power":100.0,"services":[],"bus":{"value":"832a6569-e17d-4037-b8f8-4fe974a903b0"},"available":true,"name":"Agricola","active_power":0.74,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.74,"internal":{"uuid":{"value":"146da3ab-a30d-47a5-8677-2de4f9ab821c"},"ext":null,"units_info":null},"max_reactive_power":0.15,"ext":{},"reactive_power":0.15},{"base_power":100.0,"services":[],"bus":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"available":true,"name":"Astor","active_power":3.33,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":3.33,"internal":{"uuid":{"value":"96ae9735-8ae4-49eb-bab4-8ff73b84acc4"},"ext":null,"units_info":null},"max_reactive_power":0.68,"ext":{},"reactive_power":0.68},{"base_power":100.0,"services":[],"bus":{"value":"b5260c9d-2d43-400a-bee9-eecc9d9d6465"},"available":true,"name":"Aiken","active_power":0.71,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.71,"internal":{"uuid":{"value":"fe5d8ff9-8ce2-4992-936c-c1700d3b8b65"},"ext":null,"units_info":null},"max_reactive_power":0.14,"ext":{},"reactive_power":0.14},{"base_power":100.0,"services":[],"bus":{"value":"9c9ad013-9376-4a47-b509-adce298f96a2"},"available":true,"name":"Clay","active_power":1.81,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.81,"internal":{"uuid":{"value":"2fb6661c-2ffd-42ba-bace-717d59e89602"},"ext":null,"units_info":null},"max_reactive_power":0.37,"ext":{},"reactive_power":0.37},{"base_power":100.0,"services":[],"bus":{"value":"5e92de8e-4e6a-439a-a8de-0a724beca21a"},"available":true,"name":"Barlow","active_power":2.65,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":2.65,"internal":{"uuid":{"value":"042066c5-28a4-4dbc-beea-7eef5b4e0fe6"},"ext":null,"units_info":null},"max_reactive_power":0.54,"ext":{},"reactive_power":0.54},{"base_power":100.0,"services":[],"bus":{"value":"7198f0ca-9ed2-4ae0-9bb0-6055acf090e5"},"available":true,"name":"Caine","active_power":0.74,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.74,"internal":{"uuid":{"value":"9ddf7cde-ca2c-4f4b-a552-f7fdbad691f2"},"ext":null,"units_info":null},"max_reactive_power":0.15,"ext":{},"reactive_power":0.15},{"base_power":100.0,"services":[],"bus":{"value":"9442817c-885b-4d85-9990-23ea201c62a1"},"available":true,"name":"Banks","active_power":1.95,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.95,"internal":{"uuid":{"value":"9241f09e-2781-40a6-a75e-c90c16c32f56"},"ext":null,"units_info":null},"max_reactive_power":0.4,"ext":{},"reactive_power":0.4},{"base_power":100.0,"services":[],"bus":{"value":"ddfc9c5e-f978-4523-84ca-7f3bff484639"},"available":true,"name":"Basov","active_power":1.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.0,"internal":{"uuid":{"value":"e5aead55-7cf9-4040-9fa1-055977b61d67"},"ext":null,"units_info":null},"max_reactive_power":0.2,"ext":{},"reactive_power":0.2},{"base_power":100.0,"services":[],"bus":{"value":"ddabdfef-209e-45b1-b4d3-33c7701b8702"},"available":true,"name":"Balzac","active_power":1.75,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.75,"internal":{"uuid":{"value":"f641dffd-d3c5-4b93-b832-fabfc08bb14b"},"ext":null,"units_info":null},"max_reactive_power":0.36,"ext":{},"reactive_power":0.36},{"base_power":100.0,"services":[],"bus":{"value":"04c6531b-d9aa-413f-ba97-8cb5bb98334f"},"available":true,"name":"Camus","active_power":1.36,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.36,"internal":{"uuid":{"value":"025c4cc2-1e77-4395-867f-d679e05be948"},"ext":null,"units_info":null},"max_reactive_power":0.28,"ext":{},"reactive_power":0.28},{"base_power":100.0,"services":[],"bus":{"value":"feca18b2-4a7b-45f0-8e9b-eaf8e643b622"},"available":true,"name":"Chain","active_power":1.94,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.94,"internal":{"uuid":{"value":"9530bce4-334c-48b6-8324-da147702195e"},"ext":null,"units_info":null},"max_reactive_power":0.39,"ext":{},"reactive_power":0.39},{"base_power":100.0,"services":[],"bus":{"value":"70f94b66-5398-4e42-9d7a-d4561b5a41c0"},"available":true,"name":"Alber","active_power":1.36,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.36,"internal":{"uuid":{"value":"0fb45a43-214f-4ae8-b253-cf479dc99966"},"ext":null,"units_info":null},"max_reactive_power":0.28,"ext":{},"reactive_power":0.28},{"base_power":100.0,"services":[],"bus":{"value":"9b183c0a-7bce-4253-a0b1-f49fb21250bf"},"available":true,"name":"Clark","active_power":3.33,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":3.33,"internal":{"uuid":{"value":"a517346b-2cfb-441d-ae23-027ecfe07675"},"ext":null,"units_info":null},"max_reactive_power":0.68,"ext":{},"reactive_power":0.68},{"base_power":100.0,"services":[],"bus":{"value":"907795dd-33a5-49d9-b540-4b5d447fbd7b"},"available":true,"name":"Attar","active_power":1.81,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.81,"internal":{"uuid":{"value":"ffa68cc0-b1ea-43e6-bb48-bf5c763d57fc"},"ext":null,"units_info":null},"max_reactive_power":0.37,"ext":{},"reactive_power":0.37},{"base_power":100.0,"services":[],"bus":{"value":"90dda615-0431-4b18-aaac-54aac9227f20"},"available":true,"name":"Arthur","active_power":3.17,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":3.17,"internal":{"uuid":{"value":"81edb00a-2424-4312-b006-1f3c81505d95"},"ext":null,"units_info":null},"max_reactive_power":0.64,"ext":{},"reactive_power":0.64},{"base_power":100.0,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"Cecil","active_power":2.65,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":2.65,"internal":{"uuid":{"value":"3c40eeca-8034-42f6-a16f-6a86031685cb"},"ext":null,"units_info":null},"max_reactive_power":0.54,"ext":{},"reactive_power":0.54},{"base_power":100.0,"services":[],"bus":{"value":"eb81aa38-94d2-417d-a426-0e8463be3225"},"available":true,"name":"Beethoven","active_power":1.28,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.28,"internal":{"uuid":{"value":"78fb40f2-9d78-42c6-9e9b-bc496470b746"},"ext":null,"units_info":null},"max_reactive_power":0.26,"ext":{},"reactive_power":0.26},{"base_power":100.0,"services":[],"bus":{"value":"218deb6c-bd8e-43d2-9310-51a6e8ec9955"},"available":true,"name":"Attila","active_power":1.28,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.28,"internal":{"uuid":{"value":"46d0af87-c09e-44b2-a526-139440a2f589"},"ext":null,"units_info":null},"max_reactive_power":0.26,"ext":{},"reactive_power":0.26},{"base_power":100.0,"services":[],"bus":{"value":"9baccc3b-03b4-4d16-8e7f-e72b40aed605"},"available":true,"name":"Abel","active_power":1.08,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.08,"internal":{"uuid":{"value":"f0778631-cdb0-41e5-99e5-842da4ca804a"},"ext":null,"units_info":null},"max_reactive_power":0.22,"ext":{},"reactive_power":0.22},{"base_power":100.0,"services":[],"bus":{"value":"41a4070e-75db-4e0b-96a5-2394fb58217b"},"available":true,"name":"Balch","active_power":1.71,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.71,"internal":{"uuid":{"value":"84e788cf-9a6d-4972-a445-f6f0eabd763e"},"ext":null,"units_info":null},"max_reactive_power":0.35,"ext":{},"reactive_power":0.35},{"base_power":100.0,"services":[],"bus":{"value":"7a52d27e-cef7-4783-a677-d099eab42693"},"available":true,"name":"Carter","active_power":1.75,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.75,"internal":{"uuid":{"value":"af4ba169-ab8e-4517-b80c-d2ac1b1c177b"},"ext":null,"units_info":null},"max_reactive_power":0.36,"ext":{},"reactive_power":0.36},{"base_power":100.0,"services":[],"bus":{"value":"ebc194c0-e418-403a-8ce8-c182183ef1d3"},"available":true,"name":"Clive","active_power":1.28,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.28,"internal":{"uuid":{"value":"828b4e91-6e2f-4a89-9190-45cf6d3f6f01"},"ext":null,"units_info":null},"max_reactive_power":0.26,"ext":{},"reactive_power":0.26},{"base_power":100.0,"services":[],"bus":{"value":"6230e16c-da44-4376-8bb5-6bf917679f1a"},"available":true,"name":"Calvin","active_power":0.71,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.71,"internal":{"uuid":{"value":"28df7bca-7e1c-471e-bbd8-71ff8ceb12f2"},"ext":null,"units_info":null},"max_reactive_power":0.14,"ext":{},"reactive_power":0.14},{"base_power":100.0,"services":[],"bus":{"value":"1a2750f7-765e-4307-9077-591730e1b3d7"},"available":true,"name":"Cabot","active_power":0.97,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":0.97,"internal":{"uuid":{"value":"5a302765-6d9a-471b-9d40-90d8f965a584"},"ext":null,"units_info":null},"max_reactive_power":0.2,"ext":{},"reactive_power":0.2},{"base_power":100.0,"services":[],"bus":{"value":"6c4f0ae4-e893-4ffd-9def-391110e10cba"},"available":true,"name":"Bayle","active_power":3.33,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":3.33,"internal":{"uuid":{"value":"9513d0ed-6279-4dc1-a6b8-654c30443037"},"ext":null,"units_info":null},"max_reactive_power":0.68,"ext":{},"reactive_power":0.68},{"base_power":100.0,"services":[],"bus":{"value":"968fc7b3-2f14-4de5-ad31-502862064e79"},"available":true,"name":"Bede","active_power":1.81,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.81,"internal":{"uuid":{"value":"65fa78fe-0ecc-4be1-b6bc-0d59e332e4ed"},"ext":null,"units_info":null},"max_reactive_power":0.37,"ext":{},"reactive_power":0.37},{"base_power":100.0,"services":[],"bus":{"value":"f38e5eca-680c-485c-b314-bb0ae5d4956e"},"available":true,"name":"Arnold","active_power":1.94,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.94,"internal":{"uuid":{"value":"3dcc3b48-bae1-4b3b-8103-b89c7ec12b19"},"ext":null,"units_info":null},"max_reactive_power":0.39,"ext":{},"reactive_power":0.39},{"base_power":100.0,"services":[],"bus":{"value":"884b00b1-08b6-43bd-8dea-a0d673f2f2db"},"available":true,"name":"Baker","active_power":1.25,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.25,"internal":{"uuid":{"value":"e00bdb59-d2ab-447e-9e83-03543196dc4a"},"ext":null,"units_info":null},"max_reactive_power":0.25,"ext":{},"reactive_power":0.25},{"base_power":100.0,"services":[],"bus":{"value":"119f1d8b-8559-4c7e-b70b-1b7be69c6902"},"available":true,"name":"Barry","active_power":1.94,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.94,"internal":{"uuid":{"value":"d7138ed5-76a7-4d0b-aa77-c44a513ee896"},"ext":null,"units_info":null},"max_reactive_power":0.39,"ext":{},"reactive_power":0.39},{"base_power":100.0,"services":[],"bus":{"value":"19de644e-22af-4729-8a55-a2e7f41ff2f4"},"available":true,"name":"Arne","active_power":2.65,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":2.65,"internal":{"uuid":{"value":"5289bc14-7aba-461f-8031-bb5860f00efe"},"ext":null,"units_info":null},"max_reactive_power":0.54,"ext":{},"reactive_power":0.54},{"base_power":100.0,"services":[],"bus":{"value":"9d11e0f0-a3be-4a48-9f3f-c752f31d8443"},"available":true,"name":"Baffin","active_power":1.8,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"PowerLoad"},"max_active_power":1.8,"internal":{"uuid":{"value":"e47e9585-3749-4cf5-8672-03f4d7d763f4"},"ext":null,"units_info":null},"max_reactive_power":0.37,"ext":{},"reactive_power":0.37},{"number":202,"base_voltage":138.0,"bustype":"PV","angle":-0.1877810214196211,"name":"Bacon","magnitude":1.04844,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"9732ddab-fa61-4c4c-b176-ed93ffb878e8"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"534cde34-2105-4d78-bd54-11ff59067d1d"}},{"number":321,"base_voltage":230.0,"bustype":"PV","angle":0.21539492271297458,"name":"Cobb","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"4fd3971f-f222-4c77-84ce-cb292fdb1b01"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"ff48483e-75f4-4883-8d86-8c63ce144a28"}},{"number":322,"base_voltage":230.0,"bustype":"PV","angle":0.3153659860038082,"name":"Cole","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"b4721c4e-647f-4de4-ad4f-17bc7782bf98"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"ff48483e-75f4-4883-8d86-8c63ce144a28"}},{"number":102,"base_voltage":138.0,"bustype":"PV","angle":-0.1364470483941135,"name":"Adams","magnitude":1.04783,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"2db4e2d8-c0ac-4201-8d81-f5ee7493bb6f"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"afee0d0a-3eaf-42cd-bca3-a86e51b23de1"}},{"number":117,"base_voltage":230.0,"bustype":"PQ","angle":0.19956391373276003,"name":"Aston","magnitude":1.04783,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"e3cf8c18-e2dc-43a0-8f31-6ddb07cf6599"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"c0bccf69-f298-4eb6-a281-10b437202a41"}},{"number":324,"base_voltage":230.0,"bustype":"PQ","angle":0.02279504722859714,"name":"Curie","magnitude":1.01046,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"9d5953c3-c3da-483f-8685-9a84bf179215"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"c4dbfb73-1aa5-4c9a-a6bc-4ad855c31f05"}},{"number":121,"base_voltage":230.0,"bustype":"PV","angle":0.22840303616101354,"name":"Attlee","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"29a90993-fff2-4706-9ecb-8f4130cc083b"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"c0bccf69-f298-4eb6-a281-10b437202a41"}},{"number":206,"base_voltage":138.0,"bustype":"PQ","angle":-0.28198796032281825,"name":"Bajer","magnitude":1.03259,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"f25c4d10-e062-440a-b666-88fe33b9f7b5"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"534cde34-2105-4d78-bd54-11ff59067d1d"}},{"number":217,"base_voltage":230.0,"bustype":"PQ","angle":0.15390994022494278,"name":"Bates","magnitude":1.04847,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"0e6eb978-4512-4505-bddd-4d019ed7a7cb"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"067861b7-f1fd-4a9c-9239-52efe31e972e"}},{"number":103,"base_voltage":138.0,"bustype":"PQ","angle":-0.1258539470320591,"name":"Adler","magnitude":1.01085,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"03de3f59-e8f6-49de-b44a-eae9c74bb271"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"18f189ee-3132-460f-8fcf-417c70662828"}},{"number":301,"base_voltage":138.0,"bustype":"PV","angle":-0.1631570436678591,"name":"Cabell","magnitude":1.0486,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"b79a0156-f2d8-4678-a817-c03ddbc37601"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a230b9d8-0349-4b20-b8cb-78425b006e95"}},{"number":204,"base_voltage":138.0,"bustype":"PQ","angle":-0.23535398444000616,"name":"Bailey","magnitude":1.0189,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"f1f42a05-e08e-4511-8cb6-0d4376f08905"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"9527e7ef-72d7-4a07-b447-c741496ce6a5"}},{"number":107,"base_voltage":138.0,"bustype":"PV","angle":-0.19681606735842017,"name":"Alder","magnitude":1.03745,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"1bb69ffd-e17a-42fe-9610-2ab45ec05918"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"afee0d0a-3eaf-42cd-bca3-a86e51b23de1"}},{"number":311,"base_voltage":230.0,"bustype":"PQ","angle":-0.10019394183631328,"name":"Cary","magnitude":1.0283,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"b6422506-c3b9-4461-badd-e3c04667ee0f"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"f75c7349-7abb-41db-850c-736ec4966913"}},{"number":110,"base_voltage":138.0,"bustype":"PQ","angle":-0.18536496213608536,"name":"Allen","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"ff8cb561-d277-4ed7-a228-32a618645b37"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"d4c03712-87a5-4027-ab67-5df57364eae1"}},{"number":317,"base_voltage":230.0,"bustype":"PQ","angle":0.18053999941894702,"name":"Chuhsi","magnitude":1.04785,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"df1bf7dc-30f1-41ef-b15b-d4d634a794ac"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"ff48483e-75f4-4883-8d86-8c63ce144a28"}},{"number":215,"base_voltage":230.0,"bustype":"PV","angle":0.08087000542408246,"name":"Barton","magnitude":1.04327,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"7e12cfe4-854f-4eaa-86a9-312b188619a7"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"b9803498-2530-4395-8901-faaddc88ab90"}},{"number":323,"base_voltage":230.0,"bustype":"PV","angle":0.15046692920953353,"name":"Comte","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"ab966bc8-7742-44f9-9993-8d7b399c418b"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"f636f627-1963-48a0-b932-8866f5b9aa00"}},{"number":201,"base_voltage":138.0,"bustype":"PV","angle":-0.18657098464921346,"name":"Bach","magnitude":1.04841,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"f356ec1b-e66e-450b-80ef-c8cfe2e70802"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"9527e7ef-72d7-4a07-b447-c741496ce6a5"}},{"number":303,"base_voltage":138.0,"bustype":"PQ","angle":-0.14969497008137647,"name":"Caesar","magnitude":1.01045,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"a888f416-15e5-4097-b44a-3220b01169c1"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a230b9d8-0349-4b20-b8cb-78425b006e95"}},{"number":307,"base_voltage":138.0,"bustype":"PV","angle":-0.21900304187562247,"name":"Carew","magnitude":1.03804,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"aba3b299-d290-4ad9-831f-0a3aa0cbe752"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"fe512397-8853-429b-a59f-4d01b69559b4"}},{"number":205,"base_voltage":138.0,"bustype":"PQ","angle":-0.23757194885344055,"name":"Bain","magnitude":1.03603,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"fbe92d32-594f-4312-a6e4-2c04937f9a1a"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"9527e7ef-72d7-4a07-b447-c741496ce6a5"}},{"number":315,"base_voltage":230.0,"bustype":"PV","angle":0.12306107116301779,"name":"Chase","magnitude":1.043,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"807e523d-a43c-49ba-8410-357c65d9aada"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"c4dbfb73-1aa5-4c9a-a6bc-4ad855c31f05"}},{"number":222,"base_voltage":230.0,"bustype":"PV","angle":0.28679302628648384,"name":"Bell","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"bc538156-a62e-4493-83dd-87bfa31c55ec"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"067861b7-f1fd-4a9c-9239-52efe31e972e"}},{"number":308,"base_voltage":138.0,"bustype":"PQ","angle":-0.26499107140227146,"name":"Carrel","magnitude":1.01056,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"8e3afcb3-9e7f-4bee-b476-141963fa7c6f"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"fe512397-8853-429b-a59f-4d01b69559b4"}},{"number":109,"base_voltage":138.0,"bustype":"PQ","angle":-0.15385496235350493,"name":"Ali","magnitude":1.0261,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"cd83ffee-33a7-432f-8bd8-0d83f9473178"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"d4c03712-87a5-4027-ab67-5df57364eae1"}},{"number":310,"base_voltage":138.0,"bustype":"PQ","angle":-0.2146959183475509,"name":"Caruso","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"e3609e90-84fd-43a1-a840-803e0041f5f8"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"f75c7349-7abb-41db-850c-736ec4966913"}},{"number":124,"base_voltage":230.0,"bustype":"PQ","angle":0.04159800285910765,"name":"Avery","magnitude":1.01155,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"fff97d5f-6f8b-4236-b7f7-1f3675a2bc42"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a13c023d-fe48-4e98-801b-237904b11209"}},{"number":116,"base_voltage":230.0,"bustype":"PV","angle":0.13210903253828157,"name":"Asser","magnitude":1.04565,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"0952a653-69a1-48b5-9de3-00a3e22b2ada"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a13c023d-fe48-4e98-801b-237904b11209"}},{"number":122,"base_voltage":230.0,"bustype":"PV","angle":0.33073605352857105,"name":"Aubrey","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"041b05bb-c182-42b9-9358-0426ebce9853"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"c0bccf69-f298-4eb6-a281-10b437202a41"}},{"number":211,"base_voltage":230.0,"bustype":"PQ","angle":-0.12100996022607405,"name":"Bardeen","magnitude":1.02735,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"bebe76f7-f299-4272-ac5d-3dc750b2ce87"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"f56c2c79-fcd8-478b-840d-430934527b31"}},{"number":316,"base_voltage":230.0,"bustype":"PV","angle":0.11516991401597582,"name":"Chifa","magnitude":1.04558,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"3ca9df73-7978-4df8-97bf-56fa68b787ac"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"c4dbfb73-1aa5-4c9a-a6bc-4ad855c31f05"}},{"number":108,"base_voltage":138.0,"bustype":"PQ","angle":-0.23997701256268875,"name":"Alger","magnitude":1.01024,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"68ad5aef-bd2b-4d20-a250-b4bdbc0d6522"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"afee0d0a-3eaf-42cd-bca3-a86e51b23de1"}},{"number":223,"base_voltage":230.0,"bustype":"PV","angle":0.125340994764898,"name":"Bloch","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"1af1f873-ede3-44de-bee2-011797fd973f"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"544b3126-a636-4290-96c6-0c7c64c03887"}},{"number":104,"base_voltage":138.0,"bustype":"PQ","angle":-0.18441393222667365,"name":"Agricola","magnitude":1.01765,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"832a6569-e17d-4037-b8f8-4fe974a903b0"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"18f189ee-3132-460f-8fcf-417c70662828"}},{"number":118,"base_voltage":230.0,"bustype":"PV","angle":0.21859498389650622,"name":"Astor","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"c0bccf69-f298-4eb6-a281-10b437202a41"}},{"number":105,"base_voltage":138.0,"bustype":"PQ","angle":-0.18690504066804514,"name":"Aiken","magnitude":1.03568,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"b5260c9d-2d43-400a-bee9-eecc9d9d6465"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"18f189ee-3132-460f-8fcf-417c70662828"}},{"number":319,"base_voltage":230.0,"bustype":"PQ","angle":0.10324303203954738,"name":"Clay","magnitude":1.03953,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"9c9ad013-9376-4a47-b509-adce298f96a2"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"f636f627-1963-48a0-b932-8866f5b9aa00"}},{"number":213,"base_voltage":230.0,"bustype":"PV","angle":-0.05611408078086969,"name":"Barlow","magnitude":1.03752,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"5e92de8e-4e6a-439a-a8de-0a724beca21a"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"4e0b7fc6-0da7-493b-906e-265d8a694a96"}},{"number":304,"base_voltage":138.0,"bustype":"PQ","angle":-0.21271793670626568,"name":"Caine","magnitude":1.01785,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"7198f0ca-9ed2-4ae0-9bb0-6055acf090e5"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a230b9d8-0349-4b20-b8cb-78425b006e95"}},{"number":224,"base_voltage":230.0,"bustype":"PQ","angle":-0.01675603348377156,"name":"Bordet","magnitude":1.01456,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"2c7929f0-7b7b-4767-b688-a27f6b83cc8c"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"b9803498-2530-4395-8901-faaddc88ab90"}},{"number":210,"base_voltage":138.0,"bustype":"PQ","angle":-0.23526793970788284,"name":"Banks","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"9442817c-885b-4d85-9990-23ea201c62a1"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"f56c2c79-fcd8-478b-840d-430934527b31"}},{"number":325,"base_voltage":230.0,"bustype":"PQ","angle":0.15696304468545644,"name":"Curtiss","magnitude":1.04986,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"ce6350dc-73c2-444e-ba12-75ca2bd82b61"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"f636f627-1963-48a0-b932-8866f5b9aa00"}},{"number":216,"base_voltage":230.0,"bustype":"PV","angle":0.0820320456400603,"name":"Basov","magnitude":1.04556,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"ddfc9c5e-f978-4523-84ca-7f3bff484639"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"b9803498-2530-4395-8901-faaddc88ab90"}},{"number":209,"base_voltage":138.0,"bustype":"PQ","angle":-0.204623972300142,"name":"Balzac","magnitude":1.02781,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"ddabdfef-209e-45b1-b4d3-33c7701b8702"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"f56c2c79-fcd8-478b-840d-430934527b31"}},{"number":306,"base_voltage":138.0,"bustype":"PQ","angle":-0.26078796949761873,"name":"Camus","magnitude":1.0326,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"04c6531b-d9aa-413f-ba97-8cb5bb98334f"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"fe512397-8853-429b-a59f-4d01b69559b4"}},{"number":314,"base_voltage":230.0,"bustype":"PV","angle":-0.0559889406735017,"name":"Chain","magnitude":1.04631,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"feca18b2-4a7b-45f0-8e9b-eaf8e643b622"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"c4dbfb73-1aa5-4c9a-a6bc-4ad855c31f05"}},{"number":312,"base_voltage":230.0,"bustype":"PQ","angle":-0.0723620489193857,"name":"Caxton","magnitude":1.019,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"850fe97f-e042-4197-8ca3-693e595bd77d"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"f75c7349-7abb-41db-850c-736ec4966913"}},{"number":106,"base_voltage":138.0,"bustype":"PQ","angle":-0.23176995082103577,"name":"Alber","magnitude":1.03242,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"70f94b66-5398-4e42-9d7a-d4561b5a41c0"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"afee0d0a-3eaf-42cd-bca3-a86e51b23de1"}},{"number":318,"base_voltage":230.0,"bustype":"PV","angle":0.19796606480255924,"name":"Clark","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"9b183c0a-7bce-4253-a0b1-f49fb21250bf"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"ff48483e-75f4-4883-8d86-8c63ce144a28"}},{"number":119,"base_voltage":230.0,"bustype":"PQ","angle":0.11620000734050288,"name":"Attar","magnitude":1.03962,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"907795dd-33a5-49d9-b540-4b5d447fbd7b"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a50c14d3-380f-4a44-acf4-87e15db94e74"}},{"number":111,"base_voltage":230.0,"bustype":"PQ","angle":-0.0683600089445627,"name":"Anna","magnitude":1.02764,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"b38a0c7b-b37d-4026-afdc-9ef69faf326c"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"d4c03712-87a5-4027-ab67-5df57364eae1"}},{"number":115,"base_voltage":230.0,"bustype":"PV","angle":0.13892297247099264,"name":"Arthur","magnitude":1.04335,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"90dda615-0431-4b18-aaac-54aac9227f20"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a13c023d-fe48-4e98-801b-237904b11209"}},{"number":313,"base_voltage":230.0,"bustype":"PV","angle":-0.04215197036369065,"name":"Cecil","magnitude":1.03802,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"fc9c21e2-a2d4-45c7-a0ee-24868dfaed2f"}},{"number":220,"base_voltage":230.0,"bustype":"PQ","angle":0.09886400094629359,"name":"Beethoven","magnitude":1.0438,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"eb81aa38-94d2-417d-a426-0e8463be3225"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"544b3126-a636-4290-96c6-0c7c64c03887"}},{"number":123,"base_voltage":230.0,"bustype":"PV","angle":0.15805998412033487,"name":"Austen","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"b9407086-cd2e-46fa-ba33-172c2941f753"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a50c14d3-380f-4a44-acf4-87e15db94e74"}},{"number":120,"base_voltage":230.0,"bustype":"PQ","angle":0.13509895607987307,"name":"Attila","magnitude":1.04399,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"218deb6c-bd8e-43d2-9310-51a6e8ec9955"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a50c14d3-380f-4a44-acf4-87e15db94e74"}},{"number":101,"base_voltage":138.0,"bustype":"PV","angle":-0.13511501310899143,"name":"Abel","magnitude":1.04777,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"9baccc3b-03b4-4d16-8e7f-e72b40aed605"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"18f189ee-3132-460f-8fcf-417c70662828"}},{"number":208,"base_voltage":138.0,"bustype":"PQ","angle":-0.2831550619936269,"name":"Balch","magnitude":1.01203,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"41a4070e-75db-4e0b-96a5-2394fb58217b"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"534cde34-2105-4d78-bd54-11ff59067d1d"}},{"number":309,"base_voltage":138.0,"bustype":"PQ","angle":-0.18232006072305607,"name":"Carter","magnitude":1.02579,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"7a52d27e-cef7-4783-a677-d099eab42693"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"f75c7349-7abb-41db-850c-736ec4966913"}},{"number":320,"base_voltage":230.0,"bustype":"PQ","angle":0.1256129170623587,"name":"Clive","magnitude":1.04389,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"ebc194c0-e418-403a-8ce8-c182183ef1d3"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"f636f627-1963-48a0-b932-8866f5b9aa00"}},{"number":221,"base_voltage":230.0,"bustype":"PV","angle":0.1855649768683639,"name":"Behring","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"48364fdf-90e3-439d-943d-ed503d49d2c6"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"067861b7-f1fd-4a9c-9239-52efe31e972e"}},{"number":305,"base_voltage":138.0,"bustype":"PQ","angle":-0.2155490352859257,"name":"Calvin","magnitude":1.03609,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"6230e16c-da44-4376-8bb5-6bf917679f1a"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a230b9d8-0349-4b20-b8cb-78425b006e95"}},{"number":302,"base_voltage":138.0,"bustype":"PV","angle":-0.1646020017555852,"name":"Cabot","magnitude":1.04864,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"1a2750f7-765e-4307-9077-591730e1b3d7"},"ext":null,"units_info":null},"area":{"value":"96f8d34c-9524-49a0-a062-de97793e9871"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"fe512397-8853-429b-a59f-4d01b69559b4"}},{"number":218,"base_voltage":230.0,"bustype":"PV","angle":0.17444094634785287,"name":"Bayle","magnitude":1.05,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"6c4f0ae4-e893-4ffd-9def-391110e10cba"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"067861b7-f1fd-4a9c-9239-52efe31e972e"}},{"number":219,"base_voltage":230.0,"bustype":"PQ","angle":0.07351902768053274,"name":"Bede","magnitude":1.03946,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"968fc7b3-2f14-4de5-ad31-502862064e79"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"544b3126-a636-4290-96c6-0c7c64c03887"}},{"number":114,"base_voltage":230.0,"bustype":"PV","angle":-0.03020396990331307,"name":"Arnold","magnitude":1.04401,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"f38e5eca-680c-485c-b314-bb0ae5d4956e"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"a13c023d-fe48-4e98-801b-237904b11209"}},{"number":207,"base_voltage":138.0,"bustype":"PV","angle":-0.23502708427110763,"name":"Baker","magnitude":1.03973,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"884b00b1-08b6-43bd-8dea-a0d673f2f2db"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"534cde34-2105-4d78-bd54-11ff59067d1d"}},{"number":214,"base_voltage":230.0,"bustype":"PV","angle":-0.08177199158151313,"name":"Barry","magnitude":1.04335,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"119f1d8b-8559-4c7e-b70b-1b7be69c6902"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"b9803498-2530-4395-8901-faaddc88ab90"}},{"number":212,"base_voltage":230.0,"bustype":"PQ","angle":-0.09168807972671891,"name":"Barkla","magnitude":1.01921,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"c369f892-9f64-4fca-ad27-987e501596e0"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"f56c2c79-fcd8-478b-840d-430934527b31"}},{"number":113,"base_voltage":230.0,"bustype":"REF","angle":0.0,"name":"Arne","magnitude":1.03943,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"19de644e-22af-4729-8a55-a2e7f41ff2f4"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"fa21bed4-539f-4bbf-b0ca-5b8f98458ac3"}},{"number":203,"base_voltage":138.0,"bustype":"PQ","angle":-0.18281503609892163,"name":"Baffin","magnitude":1.01886,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"9d11e0f0-a3be-4a48-9f3f-c752f31d8443"},"ext":null,"units_info":null},"area":{"value":"bc3417b2-2c1e-467b-8201-6bb47b170691"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"9527e7ef-72d7-4a07-b447-c741496ce6a5"}},{"number":112,"base_voltage":230.0,"bustype":"PQ","angle":-0.042310969858547334,"name":"Archer","magnitude":1.02024,"__metadata__":{"module":"PowerSystems","type":"ACBus"},"internal":{"uuid":{"value":"d76a05da-dca0-45bd-8fb4-6ad9e732d09b"},"ext":null,"units_info":null},"area":{"value":"3bcb9b62-02b2-4856-89b6-25fd70f84db3"},"ext":{},"voltage_limits":{"min":0.95,"max":1.05},"load_zone":{"value":"d4c03712-87a5-4027-ab67-5df57364eae1"}},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"b4721c4e-647f-4de4-ad4f-17bc7782bf98"},"available":true,"name":"322_CT_6","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"cec02ddc-30d5-435b-aa5d-52d1ec4e7c97"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":265408.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6003.0,6817.0,7176.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":-0.15203125},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"4fd3971f-f222-4c77-84ce-cb292fdb1b01"},"available":true,"name":"321_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"4bab2e94-985c-4bfe-8d14-c689d07a7033"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.228589998879815e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[5848.0,6665.0,8733.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":-0.008067632850241546},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"9732ddab-fa61-4c4c-b176-ed93ffb878e8"},"available":true,"name":"202_STEAM_3","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"4d7976f2-a2ab-4f01-b1a1-3a0b845165e7"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":355379.999905232,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[9989.0,10070.0,12902.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":0.022584269662921347},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"1af1f873-ede3-44de-bee2-011797fd973f"},"available":true,"name":"223_CT_4","status":true,"active_power":0.34375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"9276138b-023c-4cb8-b1f4-1da982d2e39f"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":435468.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[9595.0,10225.0,10676.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.00375},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"1af1f873-ede3-44de-bee2-011797fd973f"},"available":true,"name":"223_CT_6","status":true,"active_power":0.34375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"e320e993-eca6-402e-89ed-ca4eee6eea1c"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":435468.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[9595.0,10225.0,10676.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.00375},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"e9edc9c3-1572-4606-96b1-63dcc7cc8948"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.34877999877023e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[4047.0,6883.0,8683.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.36231884057971014},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"b9407086-cd2e-46fa-ba33-172c2941f753"},"available":true,"name":"123_STEAM_2","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"f5db6f6b-d990-4458-8129-f978adba352e"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":679954.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[9191.0,10865.0,15627.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":-0.028516483516483518},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"5e92de8e-4e6a-439a-a8de-0a724beca21a"},"available":true,"name":"213_CT_1","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"2b902a48-5352-4eec-99f6-82f218af828d"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":288750.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6899.0,7602.0,7797.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.14421875},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"9baccc3b-03b4-4d16-8e7f-e72b40aed605"},"available":true,"name":"101_STEAM_3","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"b88a740b-1047-4f1f-9384-66b563255de6"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":398099.99989384,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[6713.0,8028.0,8549.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":0.0015730337078651688},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"b9407086-cd2e-46fa-ba33-172c2941f753"},"available":true,"name":"123_CT_1","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"eff074dd-564b-40e3-a518-586f922599d4"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":279950.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6757.0,7667.0,7998.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.0096875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"19de644e-22af-4729-8a55-a2e7f41ff2f4"},"available":true,"name":"113_CT_3","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"2774bbd4-196f-47e3-8688-43b4890fad5b"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":288750.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6899.0,7602.0,7797.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"1a2750f7-765e-4307-9077-591730e1b3d7"},"available":true,"name":"302_CT_3","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"bfebe3c6-0ecf-482a-8231-5c4f99642d6a"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":338690.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[8693.0,9874.0,9939.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.17171875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"7e12cfe4-854f-4eaa-86a9-312b188619a7"},"available":true,"name":"215_CT_4","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"b3215202-8f73-4432-b7ce-85f4cde38c7a"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":313038.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6668.0,6987.0,8421.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"2db4e2d8-c0ac-4201-8d81-f5ee7493bb6f"},"available":true,"name":"102_STEAM_3","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"661b0ca5-b3a2-4a51-b792-1324d27b1792"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":347729.999907272,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[8734.0,9861.0,10651.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":-0.025955056179775282},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"b79a0156-f2d8-4678-a817-c03ddbc37601"},"available":true,"name":"301_CT_4","status":true,"active_power":0.6875,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"30233752-4ee0-41ea-970a-8c3d28fb8b62"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":287980.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[7324.0,7534.0,11253.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.25828125},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"19de644e-22af-4729-8a55-a2e7f41ff2f4"},"available":true,"name":"113_CT_2","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"b01a24e7-1950-4694-a434-2b2d06b77121"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":288750.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6899.0,7602.0,7797.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"48364fdf-90e3-439d-943d-ed503d49d2c6"},"available":true,"name":"221_CC_1","status":true,"active_power":0.7173188405797102,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"e0373adc-5afa-4f35-8e4f-b0f5d43b28c8"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.170789998932515e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[5950.0,6772.0,9293.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":-0.01816425120772947},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"1af1f873-ede3-44de-bee2-011797fd973f"},"available":true,"name":"223_CT_5","status":true,"active_power":0.34375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"0914a9ee-4a29-40b6-a22d-d016e5e36996"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":435468.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[9595.0,10225.0,10676.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.00375},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"807e523d-a43c-49ba-8410-357c65d9aada"},"available":true,"name":"315_CT_7","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"327de245-5ba0-40a8-83d1-8db4659cb822"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":227524.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6792.0,6919.0,8195.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"7e12cfe4-854f-4eaa-86a9-312b188619a7"},"available":true,"name":"215_CT_5","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"a52a7a23-f1a8-408d-b6cd-75144234f2ca"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":313038.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6668.0,6987.0,8421.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"ab966bc8-7742-44f9-9993-8d7b399c418b"},"available":true,"name":"323_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"3d6de96d-c596-48fd-9434-112c397f8863"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.254769998855945e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[6799.0,7789.0,8162.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.0903623188405797},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"9baccc3b-03b4-4d16-8e7f-e72b40aed605"},"available":true,"name":"101_STEAM_4","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"1ae51ba4-5d86-4b84-95cb-2c885520871a"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":398099.99989384,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[6713.0,8028.0,8549.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":0.0015730337078651688},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"19de644e-22af-4729-8a55-a2e7f41ff2f4"},"available":true,"name":"113_CT_1","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"3a52933e-ed62-445d-a8cb-75041b80827d"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":288750.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6899.0,7602.0,7797.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":412.0,"prime_mover_type":"ST","rating":0.9242443089640665,"services":[],"bus":{"value":"1af1f873-ede3-44de-bee2-011797fd973f"},"available":true,"name":"223_STEAM_3","status":true,"active_power":0.8495145631067961,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"151aa5dc-2254-4f62-b200-8a26e06d4c80"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06067961165048544,"max":0.3640776699029126},"ext":{},"operation_cost":{"start_up":36749.81355899999,"fixed":0.0,"shut_down":18374.906779499994,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":1.57206e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[140.0,210.0,280.0,350.0],"y_coords":[8922.0,10913.0,11645.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":24.0,"down":48.0},"must_run":false,"ramp_limits":{"up":0.00024271844660194176,"down":0.00024271844660194176},"time_at_status":10000.0,"active_power_limits":{"min":0.33980582524271846,"max":0.8495145631067961},"reactive_power":0.04997572815533981},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"9b183c0a-7bce-4253-a0b1-f49fb21250bf"},"available":true,"name":"318_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"8276cddb-27fe-45ec-9998-6051288cd551"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.35183999876744e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[6906.0,7017.0,8111.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.15246376811594203},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"aba3b299-d290-4ad9-831f-0a3aa0cbe752"},"available":true,"name":"307_CT_2","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"6070d131-051a-4048-8d57-124cf36ca831"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":293766.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[7176.0,7517.0,9126.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"5e92de8e-4e6a-439a-a8de-0a724beca21a"},"available":true,"name":"213_CT_2","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"705ef70e-ba9c-4eb1-ab06-77b1e426efeb"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":288750.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6899.0,7602.0,7797.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.14421875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"19de644e-22af-4729-8a55-a2e7f41ff2f4"},"available":true,"name":"113_CT_4","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"f1695e9c-162a-4e27-bde9-25a86fa1fbe8"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":288750.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6899.0,7602.0,7797.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"available":true,"name":"118_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"93225d26-571a-4a2e-b230-b143ac5c2cb6"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.233689998875165e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[5808.0,7140.0,8351.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.1652898550724638},{"base_power":64.0,"prime_mover_type":"CT","rating":1.2717828590702895,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"807e523d-a43c-49ba-8410-357c65d9aada"},"available":true,"name":"315_CT_8","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"aa546159-ae94-4101-af4b-6f4dc63adfad"},"ext":null,"units_info":null},"reactive_power_limits":{"min":0.0,"max":0.9375},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":227524.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6792.0,6919.0,8195.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.9375},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"6c4f0ae4-e893-4ffd-9def-391110e10cba"},"available":true,"name":"218_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"32dca05a-d439-4a33-8a91-01e14e76f1a5"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.9354499982353249e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[5388.0,5575.0,7658.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.14565217391304347},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"5e92de8e-4e6a-439a-a8de-0a724beca21a"},"available":true,"name":"213_CC_3","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"a9bb0842-4c03-4806-9daf-85af7afe3a23"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.33007999878728e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[6334.0,6979.0,8749.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.3280193236714976},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"90dda615-0431-4b18-aaac-54aac9227f20"},"available":true,"name":"115_STEAM_3","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"22ccbc58-5ec5-43d0-b28b-4037ed336054"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":709652.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[9650.0,10640.0,12796.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":0.43956043956043955},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"ab966bc8-7742-44f9-9993-8d7b399c418b"},"available":true,"name":"323_CC_2","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"0142ccae-8823-47d6-bea5-0a040dff17b0"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.254769998855945e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[6799.0,7789.0,8162.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.0903623188405797},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"b4721c4e-647f-4de4-ad4f-17bc7782bf98"},"available":true,"name":"322_CT_5","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"e85e327c-cfb9-4db7-8e04-6217ab865d33"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":265408.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6003.0,6817.0,7176.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":-0.15203125},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"884b00b1-08b6-43bd-8dea-a0d673f2f2db"},"available":true,"name":"207_CT_2","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"9c857627-6c6c-4feb-87f6-fe6ce2a44dd3"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":287122.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[8804.0,9481.0,10955.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":412.0,"prime_mover_type":"ST","rating":0.9242443089640665,"services":[],"bus":{"value":"b9407086-cd2e-46fa-ba33-172c2941f753"},"available":true,"name":"123_STEAM_3","status":true,"active_power":0.8495145631067961,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"53df8a9b-ba1c-4182-97ff-f2407a9b4cc6"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06067961165048544,"max":0.3640776699029126},"ext":{},"operation_cost":{"start_up":36749.81355899999,"fixed":0.0,"shut_down":18374.906779499994,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":1.69484e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[140.0,210.0,280.0,350.0],"y_coords":[9453.0,10240.0,11087.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":24.0,"down":48.0},"must_run":false,"ramp_limits":{"up":0.00024271844660194176,"down":0.00024271844660194176},"time_at_status":10000.0,"active_power_limits":{"min":0.33980582524271846,"max":0.8495145631067961},"reactive_power":0.06895631067961165},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"1af1f873-ede3-44de-bee2-011797fd973f"},"available":true,"name":"223_STEAM_1","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"31d8456a-9359-4746-aeec-967d7f777953"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":673134.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[9004.0,9314.0,9659.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":-0.05664835164835165},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"b9407086-cd2e-46fa-ba33-172c2941f753"},"available":true,"name":"123_CT_5","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"a96d8e0d-7bae-4480-bef7-9da589214fa8"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":279950.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6757.0,7667.0,7998.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.0096875},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"1af1f873-ede3-44de-bee2-011797fd973f"},"available":true,"name":"223_STEAM_2","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"a4512be9-8365-4ca6-91e6-c3278841a78d"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":673134.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[9004.0,9314.0,9659.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":-0.05664835164835165},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"9732ddab-fa61-4c4c-b176-ed93ffb878e8"},"available":true,"name":"202_STEAM_4","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"83a06209-bd4f-4bab-a79e-ec662281a1de"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":355379.999905232,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[9989.0,10070.0,12902.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":0.022584269662921347},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"0952a653-69a1-48b5-9de3-00a3e22b2ada"},"available":true,"name":"116_STEAM_1","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"24442ecf-6c97-4c4b-b1f1-902ca7599835"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":820756.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[9312.0,10158.0,11294.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":0.43956043956043955},{"base_power":471.0,"prime_mover_type":"ST","rating":0.9494980796177451,"services":[],"bus":{"value":"29a90993-fff2-4706-9ecb-8f4130cc083b"},"available":true,"name":"121_NUCLEAR_1","status":true,"active_power":0.8492569002123143,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NUCLEAR","internal":{"uuid":{"value":"a126e74a-9145-4733-b1ae-cbc5d17eeecd"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.10615711252653928,"max":0.42462845010615713},"ext":{},"operation_cost":{"start_up":63999.82230000001,"fixed":0.0,"shut_down":31999.911150000004,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.00081035,"value_curve":{"input_at_zero":null,"initial_input":3.96e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[396.0,397.3333332,398.6666668,400.0],"y_coords":[0.0,0.0,0.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":4380.0,"down":4380.0},"must_run":false,"ramp_limits":{"up":0.0,"down":0.0},"time_at_status":10000.0,"active_power_limits":{"min":0.8407643312101911,"max":0.8492569002123143},"reactive_power":-0.046433121019108285},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"b9407086-cd2e-46fa-ba33-172c2941f753"},"available":true,"name":"123_CT_4","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"1926a63c-9022-42b8-bf1e-b7baf7fca09f"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":279950.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6757.0,7667.0,7998.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.0096875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"884b00b1-08b6-43bd-8dea-a0d673f2f2db"},"available":true,"name":"207_CT_1","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"c4ffe869-c073-4be1-9715-3cc72fe0ff49"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":287122.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[8804.0,9481.0,10955.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"b79a0156-f2d8-4678-a817-c03ddbc37601"},"available":true,"name":"301_CT_3","status":true,"active_power":0.6875,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"a6db3861-e0aa-4bc0-9de6-1dd7ec1d6dc2"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":287980.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[7324.0,7534.0,11253.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.25828125},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"3ca9df73-7978-4df8-97bf-56fa68b787ac"},"available":true,"name":"316_STEAM_1","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"ffff42db-9ca8-4155-b2fc-0edba57c3cec"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":734452.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[9989.0,10070.0,12902.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":0.43956043956043955},{"base_power":182.0,"prime_mover_type":"ST","rating":0.9583936012369455,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"ddfc9c5e-f978-4523-84ca-7f3bff484639"},"available":true,"name":"216_STEAM_1","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"dce4f9a7-de20-4aef-8486-a967663054ca"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.27472527472527475,"max":0.43956043956043955},"ext":{},"operation_cost":{"start_up":22784.795618999997,"fixed":0.0,"shut_down":11392.397809499998,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":674622.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[62.0,93.0,124.0,155.0],"y_coords":[8786.0,10333.0,11191.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":8.0},"must_run":false,"ramp_limits":{"up":0.0005494505494505495,"down":0.0005494505494505495},"time_at_status":10000.0,"active_power_limits":{"min":0.34065934065934067,"max":0.8516483516483516},"reactive_power":0.43956043956043955},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"807e523d-a43c-49ba-8410-357c65d9aada"},"available":true,"name":"315_CT_6","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"b94d0fa6-d389-4db3-958e-99937de8d493"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":227524.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[6792.0,6919.0,8195.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"d4141fb9-16ec-4f9a-91ec-d5c46e418f6a"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"f356ec1b-e66e-450b-80ef-c8cfe2e70802"},"available":true,"name":"201_STEAM_3","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"54a57888-8407-4390-8be5-3acfdef7a098"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":389669.999896088,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[10495.0,11090.0,12185.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":0.07853932584269663},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"1a2750f7-765e-4307-9077-591730e1b3d7"},"available":true,"name":"302_CT_4","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"24f32b32-6fea-4471-a7db-5af27380697c"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":338690.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[8693.0,9874.0,9939.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.17171875},{"base_power":64.0,"prime_mover_type":"CT","rating":0.9092085328735097,"services":[{"value":"e6b22184-7e33-46dc-ba1c-e9174a51856c"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"aba3b299-d290-4ad9-831f-0a3aa0cbe752"},"available":true,"name":"307_CT_1","status":true,"active_power":0.859375,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"3e59a924-6ffc-4266-b240-06d7accc0e64"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.234375,"max":0.296875},"ext":{},"operation_cost":{"start_up":5665.234428000001,"fixed":0.0,"shut_down":2832.6172140000003,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":293766.0,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[22.0,33.0,44.0,55.0],"y_coords":[7176.0,7517.0,9126.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":2.2,"down":2.2},"must_run":false,"ramp_limits":{"up":0.0578125,"down":0.0578125},"time_at_status":10000.0,"active_power_limits":{"min":0.34375,"max":0.859375},"reactive_power":0.296875},{"base_power":89.0,"prime_mover_type":"ST","rating":0.9180538523962021,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"2db4e2d8-c0ac-4201-8d81-f5ee7493bb6f"},"available":true,"name":"102_STEAM_4","status":false,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"COAL","internal":{"uuid":{"value":"0cddb9c2-2d4c-406f-b4fd-8f9739d53856"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.2808988764044944,"max":0.33707865168539325},"ext":{},"operation_cost":{"start_up":11172.014351999998,"fixed":0.0,"shut_down":5586.007175999999,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0021139899999999996,"value_curve":{"input_at_zero":null,"initial_input":347729.999907272,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[29.999999992,45.333333328,60.666666664000005,76.0],"y_coords":[8734.0,9861.0,10651.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.0},"must_run":false,"ramp_limits":{"up":0.0011235955056179776,"down":0.0011235955056179776},"time_at_status":10000.0,"active_power_limits":{"min":0.33707865168539325,"max":0.8539325842696629},"reactive_power":-0.025955056179775282},{"base_power":414.0,"prime_mover_type":"CC","rating":0.9308923030214076,"services":[{"value":"32571851-ee3f-4876-bf85-777243c16355"},{"value":"f028f35e-2671-4d36-8ad8-9c38deecb111"},{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"}],"bus":{"value":"1bb69ffd-e17a-42fe-9610-2ab45ec05918"},"available":true,"name":"107_CC_1","status":true,"active_power":0.857487922705314,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"ThermalStandard"},"fuel":"NATURAL_GAS","internal":{"uuid":{"value":"79c334d6-baa1-4b80-b295-1e1897a7a8b4"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.06038647342995169,"max":0.36231884057971014},"ext":{},"operation_cost":{"start_up":28046.681022000004,"fixed":0.0,"shut_down":14023.340511000002,"variable":{"__metadata__":{"parameters":["IncrementalCurve"],"module":"PowerSystems","type":"FuelCurve"},"fuel_cost":0.0038872200000000003,"value_curve":{"input_at_zero":null,"initial_input":1.2277399988805898e6,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"PiecewiseStepData"},"x_coords":[169.999999845,231.6666668,293.33333339999996,355.0],"y_coords":[5970.0,6892.0,7854.0]},"__metadata__":{"parameters":["PiecewiseStepData"],"module":"PowerSystems","type":"IncrementalCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"ThermalGenerationCost"}},"time_limits":{"up":8.0,"down":4.5},"must_run":false,"ramp_limits":{"up":0.009999999999999998,"down":0.009999999999999998},"time_at_status":10000.0,"active_power_limits":{"min":0.4106280193236715,"max":0.857487922705314},"reactive_power":0.11958937198067632},{"name":"11.0","internal":{"uuid":{"value":"18f189ee-3132-460f-8fcf-417c70662828"},"ext":null,"units_info":null},"ext":{},"peak_active_power":4.33,"peak_reactive_power":0.88,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"21.0","internal":{"uuid":{"value":"9527e7ef-72d7-4a07-b447-c741496ce6a5"},"ext":null,"units_info":null},"ext":{},"peak_active_power":4.33,"peak_reactive_power":0.88,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"25.0","internal":{"uuid":{"value":"544b3126-a636-4290-96c6-0c7c64c03887"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.09,"peak_reactive_power":0.63,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"32.0","internal":{"uuid":{"value":"fe512397-8853-429b-a59f-4d01b69559b4"},"ext":null,"units_info":null},"ext":{},"peak_active_power":5.29,"peak_reactive_power":1.08,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"33.0","internal":{"uuid":{"value":"f75c7349-7abb-41db-850c-736ec4966913"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.7,"peak_reactive_power":0.76,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"16.0","internal":{"uuid":{"value":"a13c023d-fe48-4e98-801b-237904b11209"},"ext":null,"units_info":null},"ext":{},"peak_active_power":6.109999999999999,"peak_reactive_power":1.23,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"22.0","internal":{"uuid":{"value":"534cde34-2105-4d78-bd54-11ff59067d1d"},"ext":null,"units_info":null},"ext":{},"peak_active_power":5.29,"peak_reactive_power":1.08,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"34.0","internal":{"uuid":{"value":"fc9c21e2-a2d4-45c7-a0ee-24868dfaed2f"},"ext":null,"units_info":null},"ext":{},"peak_active_power":2.65,"peak_reactive_power":0.54,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"26.0","internal":{"uuid":{"value":"b9803498-2530-4395-8901-faaddc88ab90"},"ext":null,"units_info":null},"ext":{},"peak_active_power":6.109999999999999,"peak_reactive_power":1.23,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"24.0","internal":{"uuid":{"value":"4e0b7fc6-0da7-493b-906e-265d8a694a96"},"ext":null,"units_info":null},"ext":{},"peak_active_power":2.65,"peak_reactive_power":0.54,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"27.0","internal":{"uuid":{"value":"067861b7-f1fd-4a9c-9239-52efe31e972e"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.33,"peak_reactive_power":0.68,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"35.0","internal":{"uuid":{"value":"f636f627-1963-48a0-b932-8866f5b9aa00"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.09,"peak_reactive_power":0.63,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"12.0","internal":{"uuid":{"value":"afee0d0a-3eaf-42cd-bca3-a86e51b23de1"},"ext":null,"units_info":null},"ext":{},"peak_active_power":5.29,"peak_reactive_power":1.08,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"13.0","internal":{"uuid":{"value":"d4c03712-87a5-4027-ab67-5df57364eae1"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.7,"peak_reactive_power":0.76,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"17.0","internal":{"uuid":{"value":"c0bccf69-f298-4eb6-a281-10b437202a41"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.33,"peak_reactive_power":0.68,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"23.0","internal":{"uuid":{"value":"f56c2c79-fcd8-478b-840d-430934527b31"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.7,"peak_reactive_power":0.76,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"36.0","internal":{"uuid":{"value":"c4dbfb73-1aa5-4c9a-a6bc-4ad855c31f05"},"ext":null,"units_info":null},"ext":{},"peak_active_power":6.109999999999999,"peak_reactive_power":1.23,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"14.0","internal":{"uuid":{"value":"fa21bed4-539f-4bbf-b0ca-5b8f98458ac3"},"ext":null,"units_info":null},"ext":{},"peak_active_power":2.65,"peak_reactive_power":0.54,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"15.0","internal":{"uuid":{"value":"a50c14d3-380f-4a44-acf4-87e15db94e74"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.09,"peak_reactive_power":0.63,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"31.0","internal":{"uuid":{"value":"a230b9d8-0349-4b20-b8cb-78425b006e95"},"ext":null,"units_info":null},"ext":{},"peak_active_power":4.33,"peak_reactive_power":0.88,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"name":"37.0","internal":{"uuid":{"value":"ff48483e-75f4-4883-8d86-8c63ce144a28"},"ext":null,"units_info":null},"ext":{},"peak_active_power":3.33,"peak_reactive_power":0.68,"__metadata__":{"module":"PowerSystems","type":"LoadZone"}},{"reactive_power_limits_from":{"min":0.0,"max":1.0},"services":[],"available":true,"name":"DC1","active_power_limits_to":{"min":-1.0,"max":1.0},"arc":{"value":"823e4b29-0bfa-412b-a2da-63a5bb7f5bea"},"__metadata__":{"module":"PowerSystems","type":"TwoTerminalHVDCLine"},"internal":{"uuid":{"value":"9399ae43-856c-4c16-acee-2fa9af6b5698"},"ext":null,"units_info":null},"ext":{},"loss":{"l0":0.0,"l1":0.1},"active_power_flow":0.0,"active_power_limits_from":{"min":-1.0,"max":1.0},"reactive_power_limits_to":{"min":0.0,"max":1.0}},{"base_power":101.7,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_RTPV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"9399a935-8764-483d-98ee-861fd1229a31"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":27.0,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"ebc194c0-e418-403a-8ce8-c182183ef1d3"},"available":true,"name":"320_RTPV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"44197258-3076-4d20-8d4c-ee72ec3eeabd"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":13.2,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"5e92de8e-4e6a-439a-a8de-0a724beca21a"},"available":true,"name":"213_RTPV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"8d039de8-514b-4e4c-a347-89a8736f9594"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":62.4,"prime_mover_type":"PVe","rating":0.30000000000000004,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_RTPV_9","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"12874a51-0a19-4daf-9525-50f1116d884b"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":63.1,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_RTPV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"365a814a-e07d-4810-9ea7-4202a8e80548"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":64.1,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_RTPV_7","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"b2b55058-92cf-4e81-970f-177ce56fb71e"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":28.3,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"ebc194c0-e418-403a-8ce8-c182183ef1d3"},"available":true,"name":"320_RTPV_3","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"af884d7b-907e-4a5d-9e25-82e42fea735f"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":100.9,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"8e3afcb3-9e7f-4bee-b476-141963fa7c6f"},"available":true,"name":"308_RTPV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"68deb453-a3c8-4eb5-8348-b41f1745c6cd"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":67.0,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_RTPV_4","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"dbc22de8-6db0-4412-a50b-e243fe94f45c"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":64.8,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_RTPV_5","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"a84b9904-8d92-44e4-97c0-af21a0318f75"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":63.8,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_RTPV_6","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"5ac3e814-b418-4bbe-bc6b-b584009dc8b9"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":27.3,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"ebc194c0-e418-403a-8ce8-c182183ef1d3"},"available":true,"name":"320_RTPV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"ef26c93d-d042-4cdb-aae2-a59e4aa59d6e"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.4,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"ebc194c0-e418-403a-8ce8-c182183ef1d3"},"available":true,"name":"320_RTPV_6","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"f3b4129d-b6a2-47f3-bedc-6ebc719bbe10"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":28.2,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"ebc194c0-e418-403a-8ce8-c182183ef1d3"},"available":true,"name":"320_RTPV_5","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"1a7f315d-9c32-4481-9db5-a7530d28be1b"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.7,"prime_mover_type":"PVe","rating":0.29999999999999993,"services":[],"bus":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"available":true,"name":"118_RTPV_2","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"0ebc06b5-9f7e-4f2f-9ad5-c9892081a921"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":27.0,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"ebc194c0-e418-403a-8ce8-c182183ef1d3"},"available":true,"name":"320_RTPV_4","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"b91d1351-43d3-42c7-aa56-cf3ea5517221"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":65.2,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_RTPV_11","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"e4a66595-ce2d-4d79-8acb-d40c442626c9"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":11.8,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"available":true,"name":"118_RTPV_7","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"3b7d2f43-70dc-4ac7-92fc-7ebc352c6398"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.4,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"available":true,"name":"118_RTPV_3","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"a97e8a0c-9f65-4803-a485-c2fc3edde46d"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":27.2,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_RTPV_13","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"2ae3f567-f86c-4548-b01f-219b0bd49427"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":27.8,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_RTPV_12","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"1c9f08be-f281-4f13-95dd-bb7873729e39"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":11.2,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"available":true,"name":"118_RTPV_8","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"1b89ab0e-11c9-44be-b3b3-d1d1eabe8d0e"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":65.4,"prime_mover_type":"PVe","rating":0.30000000000000004,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_RTPV_3","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"203c6b83-a9b6-4be5-b018-4c8e66306426"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":4.5,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"available":true,"name":"118_RTPV_10","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"a2c9e7ee-d202-4d8e-a98a-cae399521a74"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":66.9,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_RTPV_10","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"41605b33-56be-428b-a566-72cc8bfe23df"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.1,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"available":true,"name":"118_RTPV_5","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"bebdb849-da28-4de1-aac7-e4e2e27bec87"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.3,"prime_mover_type":"PVe","rating":0.30000000000000004,"services":[],"bus":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"available":true,"name":"118_RTPV_1","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"d5dd2add-dd24-4a89-a604-10941c61b092"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":10.3,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"available":true,"name":"118_RTPV_9","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"2e42fe3e-0de3-4341-a5d6-b00350303a6c"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.7,"prime_mover_type":"PVe","rating":0.29999999999999993,"services":[],"bus":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"available":true,"name":"118_RTPV_6","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"c63a7297-1f6e-4555-9efe-65589ab0a97f"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":66.6,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"032c88cf-c56a-4bff-9d6b-a481667d42f8"},"available":true,"name":"313_RTPV_8","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"bcd6a40a-f55b-4433-bdfe-53226ac9fbb9"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":9.1,"prime_mover_type":"PVe","rating":0.3,"services":[],"bus":{"value":"6a46c188-eac0-4651-a764-26273438755c"},"available":true,"name":"118_RTPV_4","power_factor":1.0,"active_power":0.0,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"RenewableNonDispatch"},"internal":{"uuid":{"value":"3e70d5fc-5f9e-4d16-b955-529519a4d579"},"ext":null,"units_info":null},"ext":{},"reactive_power":0.0},{"base_power":53.0,"prime_mover_type":"HY","rating":0.9905211130872972,"services":[],"bus":{"value":"f356ec1b-e66e-450b-80ef-c8cfe2e70802"},"available":true,"name":"201_HYDRO_4","active_power":0.9433962264150944,"dynamic_injector":null,"__metadata__":{"module":"PowerSystems","type":"HydroDispatch"},"internal":{"uuid":{"value":"c73a94eb-58a2-4cae-bd6f-13c699ae7627"},"ext":null,"units_info":null},"reactive_power_limits":{"min":-0.18867924528301888,"max":0.3018867924528302},"ext":{},"operation_cost":{"fixed":0.0,"variable":{"__metadata__":{"parameters":["InputOutputCurve"],"module":"PowerSystems","type":"CostCurve"},"value_curve":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}},"power_units":"NATURAL_UNITS","vom_cost":{"input_at_zero":null,"function_data":{"__metadata__":{"module":"InfrastructureSystems","type":"LinearFunctionData"},"constant_term":0.0,"proportional_term":0.0},"__metadata__":{"parameters":["LinearFunctionData"],"module":"PowerSystems","type":"InputOutputCurve"}}},"__metadata__":{"module":"PowerSystems","type":"HydroGenerationCost"}},"time_limits":{"up":0.0,"down":0.0},"ramp_limits":{"up":0.9433962264150944,"down":0.9433962264150944},"active_power_limits":{"min":0.0,"max":0.9433962264150944},"reactive_power":0.07830188679245284},{"requirement":1.3475000000000001,"max_participation_factor":1.0,"sustained_time":3600.0,"available":true,"name":"Reg_Down","__metadata__":{"parameters":["ReserveDown"],"construct_with_parameters":true,"module":"PowerSystems","type":"VariableReserve"},"internal":{"uuid":{"value":"a3a81b56-8649-4d8d-8b7a-6d6f14af34a9"},"ext":null,"units_info":null},"time_frame":300.0,"ext":{},"deployed_fraction":0.0,"max_output_fraction":1.0}],"subsystems":{},"version_info":{"julia_version":"1.10.4","package_info":"Status `~/work/PowerSimulations.jl/PowerSimulations.jl/docs/Manifest.toml`\n [a4c015fc] ANSIColoredPrinters v0.0.1\n [1520ce14] AbstractTrees v0.4.5\n [79e6a3ab] Adapt v4.0.4\n [4fba245c] ArrayInterface v7.12.0\n [6e4b80f9] BenchmarkTools v1.5.0\n [a74b3585] Blosc v0.7.3\n [336ed68f] CSV v0.10.14\n [9961bab8] Cbc v1.2.0\n [523fee87] CodecBzip2 v0.8.3\n [944b1d66] CodecZlib v0.7.5\n [bbf7d656] CommonSubexpressions v0.3.0\n [34da2185] Compat v4.15.0\n [187b0558] ConstructionBase v1.5.6\n [a8cc5b0e] Crayons v4.1.1\n [a10d1c49] DBInterface v2.6.1\n [9a962f9c] DataAPI v1.16.0\n [a93c6f00] DataFrames v1.6.1\n [864edb3b] DataStructures v0.18.20\n [e2d170a0] DataValueInterfaces v1.0.0\n [8bb1440f] DelimitedFiles v1.9.1\n [163ba53b] DiffResults v1.1.0\n [b552c78f] DiffRules v1.15.1\n [b4f34e82] Distances v0.10.11\n [ffbed154] DocStringExtensions v0.9.3\n⌅ [e30172f5] Documenter v0.27.25\n [35a29f4d] DocumenterTools v0.1.19\n [e2ba6199] ExprTools v0.1.10\n [48062228] FilePathsBase v0.9.21\n [6a86dc24] FiniteDiff v2.23.1\n [1fa38f19] Format v1.3.7\n [f6369f11] ForwardDiff v0.10.36\n [60bf3e95] GLPK v1.2.1\n [708ec375] Gumbo v0.8.2\n [c8ec2601] H5Zblosc v0.1.2\n [f67ccb44] HDF5 v0.17.2\n [87dc4568] HiGHS v1.9.1\n [fc1677e0] HydroPowerSimulations v0.9.1\n [b5f81e59] IOCapture v0.2.5\n [2030c09a] InfrastructureModels v0.7.8\n [2cd47ed4] InfrastructureSystems v2.0.2\n [842dd82b] InlineStrings v1.4.2\n [41ab1584] InvertedIndices v1.3.0\n [92d709cd] IrrationalConstants v0.2.2\n [82899510] IteratorInterfaceExtensions v1.0.0\n [692b3bcd] JLLWrappers v1.5.0\n [682c06a0] JSON v0.21.4\n [0f8b85d8] JSON3 v1.14.0\n [4076af6c] JuMP v1.22.2\n [ef3ab10e] KLU v0.6.0\n [b964fa9f] LaTeXStrings v1.3.1\n⌅ [23fbe1c1] Latexify v0.16.3\n [1d6d02ad] LeftChildRightSiblingTrees v0.2.0\n [d3d80556] LineSearches v7.2.0\n [2ab3a3ac] LogExpFunctions v0.3.28\n⌅ [33e6dc65] MKL v0.6.3\n [3da0fdf6] MPIPreferences v0.1.11\n [1914dd2f] MacroTools v0.5.13\n [b8f27783] MathOptInterface v1.31.0\n [f28f55f0] Memento v1.4.1\n [e1d29d7a] Missings v1.2.0\n [ffc61752] Mustache v1.0.19\n [d8a4904e] MutableArithmetics v1.4.5\n [d41bc354] NLSolversBase v7.8.3\n [2774e3e8] NLsolve v4.5.1\n [77ba4419] NaNMath v1.0.2\n [bac558e1] OrderedCollections v1.6.3\n [d96e819e] Parameters v0.12.3\n [46dd5b70] Pardiso v0.5.7\n [69de0a69] Parsers v2.8.1\n [2dfb63ee] PooledArrays v1.4.3\n [dd99e9e3] PowerFlowData v1.5.0\n [c36e90e8] PowerModels v0.21.2\n [bed98974] PowerNetworkMatrices v0.11.0\n [e690365d] PowerSimulations v0.28.3 `~/work/PowerSimulations.jl/PowerSimulations.jl`\n [f00506e0] PowerSystemCaseBuilder v1.3.4\n [bcd98974] PowerSystems v4.1.4\n [aea7be01] PrecompileTools v1.2.1\n [21216c6a] Preferences v1.4.3\n [08abe8d2] PrettyTables v2.3.2\n [33c8b6b6] ProgressLogging v0.1.4\n [92933f4c] ProgressMeter v1.10.2\n [3cdcf5f2] RecipesBase v1.3.4\n [189a3867] Reexport v1.2.2\n [ae029012] Requires v1.3.0\n [0aa819cd] SQLite v1.6.1\n [322a6be2] Sass v0.2.0\n [91c51154] SentinelArrays v1.4.5\n [efcf1570] Setfield v1.1.1\n [a2af1166] SortingAlgorithms v1.2.1\n [276daf66] SpecialFunctions v2.4.0\n [1e83bf80] StaticArraysCore v1.4.3\n [82ae8749] StatsAPI v1.7.0\n [69024149] StringEncodings v0.3.7\n [892a3eda] StringManipulation v0.3.4\n [856f2bd8] StructTypes v1.10.0\n [3783bdb8] TableTraits v1.0.1\n [bd369af6] Tables v1.12.0\n [5d786b92] TerminalLoggers v0.1.7\n [9e3dc215] TimeSeries v0.24.2\n [a759f4b9] TimerOutputs v0.5.24\n [3bb67fe8] TranscodingStreams v0.11.1\n [3a884ed6] UnPack v1.0.2\n [ea10d353] WeakRefStrings v1.4.2\n [76eceee3] WorkerUtilities v1.6.1\n [ddb6d928] YAML v0.4.11\n [ae81ac8f] ASL_jll v0.1.3+0\n [0b7ba130] Blosc_jll v1.21.5+0\n [6e34b625] Bzip2_jll v1.0.8+1\n [38041ee0] Cbc_jll v200.1000.800+0\n [3830e938] Cgl_jll v0.6000.600+0\n⌅ [06985876] Clp_jll v100.1700.700+1\n⌅ [be027038] CoinUtils_jll v200.1100.600+0\n [e8aa6df9] GLPK_jll v5.0.1+0\n [528830af] Gumbo_jll v0.10.2+0\n⌃ [0234f1f7] HDF5_jll v1.12.2+2\n [8fd58aa0] HiGHS_jll v1.7.1+0\n [1d5cc7b8] IntelOpenMP_jll v2024.2.0+0\n [94ce4f54] Libiconv_jll v1.17.0+0\n [5ced341a] Lz4_jll v1.9.4+0\n [d00139f3] METIS_jll v5.1.2+0\n [856f044c] MKL_jll v2024.2.0+0\n [d7ed1dd3] MUMPS_seq_jll v500.700.300+0\n⌅ [656ef2d0] OpenBLAS32_jll v0.3.24+0\n⌅ [9bd350c2] OpenSSH_jll v8.9.0+1\n⌅ [458c3c95] OpenSSL_jll v1.1.23+0\n [efe28fd5] OpenSpecFun_jll v0.5.5+0\n⌅ [7da25872] Osi_jll v0.10800.700+0\n [76ed43ae] SQLite_jll v3.45.3+0\n [3161d3a3] Zstd_jll v1.5.6+0\n [47bcb7c8] libsass_jll v3.6.6+0\n [1317d2d5] oneTBB_jll v2021.12.0+0\n [0dad84c5] ArgTools v1.1.1\n [56f22d72] Artifacts\n [2a0f44e3] Base64\n [ade2ca70] Dates\n [8ba89e20] Distributed\n [f43a241f] Downloads v1.6.0\n [7b1f6079] FileWatching\n [9fa8497b] Future\n [b77e0a4c] InteractiveUtils\n [4af54fe1] LazyArtifacts\n [b27032c2] LibCURL v0.6.4\n [76f85450] LibGit2\n [8f399da3] Libdl\n [37e2e46d] LinearAlgebra\n [56ddb016] Logging\n [d6f4376e] Markdown\n [a63ad114] Mmap\n [ca575930] NetworkOptions v1.2.0\n [44cfe95a] Pkg v1.10.0\n [de0858da] Printf\n [9abbd945] Profile\n [3fa0cd96] REPL\n [9a3f8284] Random\n [ea8e919c] SHA v0.7.0\n [9e88b42a] Serialization\n [6462fe0b] Sockets\n [2f01184e] SparseArrays v1.10.0\n [10745b16] Statistics v1.10.0\n [4607b0f0] SuiteSparse\n [fa267f1f] TOML v1.0.3\n [a4e569a6] Tar v1.10.0\n [8dfed614] Test\n [cf7118a7] UUIDs\n [4ec0a83e] Unicode\n [e66e0078] CompilerSupportLibraries_jll v1.1.1+0\n [781609d7] GMP_jll v6.2.1+6\n [deac9b47] LibCURL_jll v8.4.0+0\n [e37daf67] LibGit2_jll v1.6.4+0\n [29816b5a] LibSSH2_jll v1.11.0+1\n [c8ffd9c3] MbedTLS_jll v2.28.2+1\n [14a3606d] MozillaCACerts_jll v2023.1.10\n [4536629a] OpenBLAS_jll v0.3.23+4\n [05823500] OpenLibm_jll v0.8.1+2\n [bea87d4a] SuiteSparse_jll v7.2.1+1\n [83775a58] Zlib_jll v1.2.13+1\n [8e850b90] libblastrampoline_jll v5.8.0+1\n [8e850ede] nghttp2_jll v1.52.0+1\n [3f19e933] p7zip_jll v17.4.0+2\nInfo Packages marked with ⌃ and ⌅ have new versions available. Those with ⌃ may be upgradable, but those with ⌅ are restricted by compatibility constraints from upgrading. To see why use `status --outdated -m`\n"},"time_series_storage_file":"system-d4831ec5-1be7-4057-aa3f-e30006d9ba3b_time_series_storage.h5"},"units_settings":{"base_value":100.0,"unit_system":"SYSTEM_BASE","__metadata__":{"module":"InfrastructureSystems","type":"SystemUnitsSettings"}},"frequency":60.0,"runchecks":true,"metadata":{"name":null,"description":null,"__metadata__":{"module":"PowerSystems","type":"SystemMetadata"}},"data_format_version":"4.0.0"} \ No newline at end of file diff --git a/v0.28.3/tutorials/rts-store/rts-test/problems/UC/system-d4831ec5-1be7-4057-aa3f-e30006d9ba3b_metadata.json b/v0.28.3/tutorials/rts-store/rts-test/problems/UC/system-d4831ec5-1be7-4057-aa3f-e30006d9ba3b_metadata.json new file mode 100644 index 0000000000..b148ae7a79 --- /dev/null +++ b/v0.28.3/tutorials/rts-store/rts-test/problems/UC/system-d4831ec5-1be7-4057-aa3f-e30006d9ba3b_metadata.json @@ -0,0 +1,80 @@ +{ + "name": "", + "description": "", + "frequency": 60, + "time_series_resolutions_milliseconds": [ + 3600000 + ], + "component_counts": [ + { + "type": "ACBus", + "count": 73 + }, + { + "type": "Arc", + "count": 109 + }, + { + "type": "Area", + "count": 3 + }, + { + "type": "FixedAdmittance", + "count": 3 + }, + { + "type": "HydroDispatch", + "count": 1 + }, + { + "type": "Line", + "count": 105 + }, + { + "type": "LoadZone", + "count": 21 + }, + { + "type": "PowerLoad", + "count": 51 + }, + { + "type": "RenewableDispatch", + "count": 29 + }, + { + "type": "RenewableNonDispatch", + "count": 31 + }, + { + "type": "TapTransformer", + "count": 15 + }, + { + "type": "ThermalStandard", + "count": 54 + }, + { + "type": "TwoTerminalHVDCLine", + "count": 1 + }, + { + "type": "VariableReserve{ReserveDown}", + "count": 1 + }, + { + "type": "VariableReserve{ReserveUp}", + "count": 4 + } + ], + "time_series_counts": [ + { + "type": "DeterministicSingleTimeSeries", + "count": 124 + }, + { + "type": "SingleTimeSeries", + "count": 124 + } + ] +} \ No newline at end of file diff --git a/v0.28.3/tutorials/rts-store/rts-test/problems/UC/system-d4831ec5-1be7-4057-aa3f-e30006d9ba3b_time_series_storage.h5 b/v0.28.3/tutorials/rts-store/rts-test/problems/UC/system-d4831ec5-1be7-4057-aa3f-e30006d9ba3b_time_series_storage.h5 new file mode 100644 index 0000000000..380378c15f Binary files /dev/null and b/v0.28.3/tutorials/rts-store/rts-test/problems/UC/system-d4831ec5-1be7-4057-aa3f-e30006d9ba3b_time_series_storage.h5 differ diff --git a/v0.28.3/tutorials/rts-store/rts-test/recorder/execution.log b/v0.28.3/tutorials/rts-store/rts-test/recorder/execution.log new file mode 100644 index 0000000000..483982d82c --- /dev/null +++ b/v0.28.3/tutorials/rts-store/rts-test/recorder/execution.log @@ -0,0 +1,10 @@ +{"timestamp":"2024-07-24T20:46:01.935","model_name":"UC","name":"StateUpdateEvent","simulation_time":"2020-01-01T00:00:00.0","state_type":"DecisionState"} +{"timestamp":"2024-07-24T20:46:02.806","parameter_type":"ActivePowerTimeSeriesParameter","model_name":"ED","component_type":"PowerLoad","tag":"max_active_power","name":"ParameterUpdateEvent","simulation_time":"2020-01-01T00:00:00.0"} +{"timestamp":"2024-07-24T20:46:03.044","parameter_type":"RequirementTimeSeriesParameter","model_name":"ED","component_type":"VariableReserve{ReserveUp}","tag":"requirement","name":"ParameterUpdateEvent","simulation_time":"2020-01-01T00:00:00.0"} +{"timestamp":"2024-07-24T20:46:03.168","parameter_type":"OnStatusParameter","model_name":"ED","component_type":"ThermalStandard","tag":"OnVariable__ThermalStandard","name":"ParameterUpdateEvent","simulation_time":"2020-01-01T00:00:00.0"} +{"timestamp":"2024-07-24T20:46:03.398","parameter_type":"RequirementTimeSeriesParameter","model_name":"ED","component_type":"VariableReserve{ReserveDown}","tag":"requirement","name":"ParameterUpdateEvent","simulation_time":"2020-01-01T00:00:00.0"} +{"timestamp":"2024-07-24T20:46:03.716","parameter_type":"ActivePowerTimeSeriesParameter","model_name":"ED","component_type":"RenewableDispatch","tag":"max_active_power","name":"ParameterUpdateEvent","simulation_time":"2020-01-01T00:00:00.0"} +{"timestamp":"2024-07-24T20:46:03.719","parameter_type":"RequirementTimeSeriesParameter","model_name":"ED","component_type":"VariableReserve{ReserveUp}","tag":"requirement","name":"ParameterUpdateEvent","simulation_time":"2020-01-01T00:00:00.0"} +{"timestamp":"2024-07-24T20:46:03.722","parameter_type":"RequirementTimeSeriesParameter","model_name":"ED","component_type":"VariableReserve{ReserveUp}","tag":"requirement","name":"ParameterUpdateEvent","simulation_time":"2020-01-01T00:00:00.0"} +{"timestamp":"2024-07-24T20:46:03.726","parameter_type":"RequirementTimeSeriesParameter","model_name":"ED","component_type":"VariableReserve{ReserveUp}","tag":"requirement","name":"ParameterUpdateEvent","simulation_time":"2020-01-01T00:00:00.0"} +{"timestamp":"2024-07-24T20:46:04.059","parameter_type":"ActivePowerTimeSeriesParameter","model_name":"ED","component_type":"RenewableNonDispatch","tag":"max_active_power","name":"ParameterUpdateEvent","simulation_time":"2020-01-01T00:00:00.0"} diff --git a/v0.28.3/tutorials/rts-store/rts-test/recorder/simulation_status.log b/v0.28.3/tutorials/rts-store/rts-test/recorder/simulation_status.log new file mode 100644 index 0000000000..353200b40b --- /dev/null +++ b/v0.28.3/tutorials/rts-store/rts-test/recorder/simulation_status.log @@ -0,0 +1,4 @@ +{"timestamp":"2024-07-24T20:45:54.817","status":"start","step":1,"name":"SimulationStepEvent","simulation_time":"2020-01-01T00:00:00.0"} +{"timestamp":"2024-07-24T20:45:55.867","model_name":"UC","status":"start","step":1,"name":"ProblemExecutionEvent","simulation_time":"2020-01-01T00:00:00.0"} +{"timestamp":"2024-07-24T20:46:02.004","model_name":"UC","status":"done","step":1,"name":"ProblemExecutionEvent","simulation_time":"2020-01-01T00:00:00.0"} +{"timestamp":"2024-07-24T20:46:02.005","model_name":"ED","status":"start","step":1,"name":"ProblemExecutionEvent","simulation_time":"2020-01-01T00:00:00.0"} diff --git a/v0.28.3/tutorials/rts-store/rts-test/results/status.json b/v0.28.3/tutorials/rts-store/rts-test/results/status.json new file mode 100644 index 0000000000..bdeb484453 --- /dev/null +++ b/v0.28.3/tutorials/rts-store/rts-test/results/status.json @@ -0,0 +1 @@ +{"run_status":"FAILED"} \ No newline at end of file diff --git a/v0.28.3/tutorials/rts-store/rts-test/simulation_files/simulation.bin b/v0.28.3/tutorials/rts-store/rts-test/simulation_files/simulation.bin new file mode 100644 index 0000000000..f21b921664 Binary files /dev/null and b/v0.28.3/tutorials/rts-store/rts-test/simulation_files/simulation.bin differ diff --git a/versions.js b/versions.js index 51a3730e16..427003c655 100644 --- a/versions.js +++ b/versions.js @@ -22,5 +22,5 @@ var DOC_VERSIONS = [ "v0.6", "v0.5", ]; -var DOCUMENTER_NEWEST = "v0.28.2"; +var DOCUMENTER_NEWEST = "v0.28.3"; var DOCUMENTER_STABLE = "stable";