Source code for pypowsybl.security.impl.parameters
# Copyright (c) 2023, RTE (http://www.rte-france.com)
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# SPDX-License-Identifier: MPL-2.0
#
from typing import Dict
from pypowsybl.loadflow.impl.util import parameters_from_c
from pypowsybl import _pypowsybl
from pypowsybl.loadflow import Parameters as LfParameters
from .increased_violations_parameters import IncreasedViolationsParameters
[docs]class Parameters: # pylint: disable=too-few-public-methods
"""
Parameters for a security analysis execution.
All parameters are first read from you configuration file, then overridden with
the constructor arguments.
Please note that security analysis providers may not honor all parameters, according to their capabilities.
For example, some providers will not be able to simulate the voltage control of shunt compensators, etc.
The exact behaviour of some parameters may also depend on your security analysis provider.
Please check the documentation of your provider for that information.
.. currentmodule:: pypowsybl.security
Args:
load_flow_parameters: parameters that are common to loadflow and security analysis
increased_violations_parameters: Define what violations should be considered increased between N and contingency situations
provider_parameters: Define parameters linked to the security analysis provider
the names of the existing parameters can be found with method ``get_provider_parameters_names``
"""
def __init__(self,
load_flow_parameters: LfParameters = None,
increased_violations_parameters: IncreasedViolationsParameters = None,
provider_parameters: Dict[str, str] = None):
self._init_with_default_values()
if load_flow_parameters is not None:
self.load_flow_parameters = load_flow_parameters
if increased_violations_parameters:
self._increased_violations = increased_violations_parameters
if provider_parameters is not None:
self.provider_parameters = provider_parameters
@property
def increased_violations(self) -> IncreasedViolationsParameters:
"""
Define what violations should be considered increased between N and post-contingency situations
"""
return self._increased_violations
def _init_with_default_values(self) -> None:
default_parameters = _pypowsybl.SecurityAnalysisParameters()
self.load_flow_parameters = parameters_from_c(default_parameters.loadflow_parameters)
self._increased_violations = IncreasedViolationsParameters(default_parameters.flow_proportional_threshold,
default_parameters.low_voltage_proportional_threshold,
default_parameters.low_voltage_absolute_threshold,
default_parameters.high_voltage_proportional_threshold,
default_parameters.high_voltage_absolute_threshold)
self.provider_parameters = dict(
zip(default_parameters.provider_parameters_keys, default_parameters.provider_parameters_values))
def _to_c_parameters(self) -> _pypowsybl.SecurityAnalysisParameters:
c_parameters = _pypowsybl.SecurityAnalysisParameters()
c_parameters.loadflow_parameters = self.load_flow_parameters._to_c_parameters() # pylint: disable=protected-access
c_parameters.flow_proportional_threshold = self.increased_violations.flow_proportional_threshold
c_parameters.low_voltage_proportional_threshold = self.increased_violations.low_voltage_proportional_threshold
c_parameters.low_voltage_absolute_threshold = self.increased_violations.low_voltage_absolute_threshold
c_parameters.high_voltage_proportional_threshold = self.increased_violations.high_voltage_proportional_threshold
c_parameters.high_voltage_absolute_threshold = self.increased_violations.high_voltage_absolute_threshold
c_parameters.provider_parameters_keys = list(self.provider_parameters.keys())
c_parameters.provider_parameters_values = list(self.provider_parameters.values())
return c_parameters
def __repr__(self) -> str:
return f"{self.__class__.__name__}(" \
f", load_flow_parameters={self.load_flow_parameters!r}" \
f", increased_violations={self.increased_violations!r}" \
f", provider_parameters={self.provider_parameters!r}" \
f")"