Source code for VeraGridEngine.Simulations.Reliability.reliability_results

# 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 https://mozilla.org/MPL/2.0/.
# SPDX-License-Identifier: MPL-2.0

import numpy as np
import pandas as pd
from VeraGridEngine.Simulations.results_table import ResultsTable
from VeraGridEngine.Simulations.results_template import ResultsTemplate, ResultsProperty
from VeraGridEngine.basic_structures import DateVec, IntVec, Vec
from VeraGridEngine.enumerations import StudyResultsType, ResultTypes, DeviceType


[docs] class ReliabilityResults(ResultsTemplate): LOCAL_RESULTS_DECLARATIONS = ( ResultsProperty(name='LOLE_evolution', tpe=Vec, old_names=list(), expandable=False), ResultsProperty(name='ENS_evolution', tpe=Vec, old_names=list(), expandable=False), ResultsProperty(name='LOLF_evolution', tpe=Vec, old_names=list(), expandable=False), ResultsProperty(name='LOLET_evolution', tpe=Vec, old_names=list(), expandable=False), ResultsProperty(name='LOLFT_evolution', tpe=Vec, old_names=list(), expandable=False), ResultsProperty(name='SAIDI_evolution', tpe=Vec, old_names=list(), expandable=False), ResultsProperty(name='SAIFI_evolution', tpe=Vec, old_names=list(), expandable=False), ResultsProperty(name='CAIDI_evolution', tpe=Vec, old_names=list(), expandable=False), ) __slots__ = ( "LOLE_evolution", "ENS_evolution", "LOLF_evolution", "LOLET_evolution", "LOLFT_evolution", "SAIDI_evolution", "SAIFI_evolution", "CAIDI_evolution", ) def __init__(self, nsim: int): """ Clustering Results constructor """ ResultsTemplate.__init__( self, name='Reliability Analysis', available_results=[ ResultTypes.ReliabilityLOLEResults, ResultTypes.ReliabilityENSResults, ResultTypes.ReliabilityLOLFResults, ResultTypes.ReliabilityLOLETResults, ResultTypes.ReliabilityLOLFTResults, ResultTypes.ReliabilitySAIDIResults, ResultTypes.ReliabilitySAIFIResults, ResultTypes.ReliabilityCAIDIResults, ], clustering_results=None, time_array=None, study_results_type=StudyResultsType.Clustering ) self.LOLE_evolution = np.zeros(nsim) self.ENS_evolution = np.zeros(nsim) self.LOLF_evolution = np.zeros(nsim) self.LOLET_evolution = np.zeros(nsim) self.LOLFT_evolution = np.zeros(nsim) self.SAIDI_evolution = np.zeros(nsim) self.SAIFI_evolution = np.zeros(nsim) self.CAIDI_evolution = np.zeros(nsim)
[docs] def mdl(self, result_type: ResultTypes) -> ResultsTable: """ Plot the results. :param result_type: ResultTypes :return: ResultsModel """ if result_type == ResultTypes.ReliabilityLOLEResults: return ResultsTable(data=self.LOLE_evolution, index=np.arange(len(self.LOLE_evolution), dtype=int), columns=np.array(['LOLE']), title=result_type.value, units="hours", idx_device_type=DeviceType.NoDevice, cols_device_type=DeviceType.NoDevice, ylabel='incident_hours/year') elif result_type == ResultTypes.ReliabilityENSResults: return ResultsTable(data=self.ENS_evolution, index=np.arange(len(self.ENS_evolution), dtype=int), columns=np.array(['ENS']), title=result_type.value, units="MWh", idx_device_type=DeviceType.NoDevice, cols_device_type=DeviceType.NoDevice, ylabel='MWh/year') elif result_type == ResultTypes.ReliabilityLOLFResults: return ResultsTable(data=self.LOLF_evolution, index=np.arange(len(self.LOLF_evolution), dtype=int), columns=np.array(['LOLF']), title=result_type.value, units="nΒΊ of incidences", idx_device_type=DeviceType.NoDevice, cols_device_type=DeviceType.NoDevice, ylabel='nΒΊ of incidences/year') elif result_type == ResultTypes.ReliabilityLOLETResults: return ResultsTable(data=self.LOLET_evolution, index=np.arange(len(self.LOLET_evolution), dtype=int), columns=np.array(['LOLET_total']), title=result_type.value, units="nΒΊ of hours", idx_device_type=DeviceType.NoDevice, cols_device_type=DeviceType.NoDevice, ylabel='failure_hours/year') elif result_type == ResultTypes.ReliabilityLOLFTResults: return ResultsTable(data=self.LOLFT_evolution, index=np.arange(len(self.LOLFT_evolution), dtype=int), columns=np.array(['LOLFT_total']), title=result_type.value, units="nΒΊ of failures", idx_device_type=DeviceType.NoDevice, cols_device_type=DeviceType.NoDevice, ylabel='nΒΊ of failures/year') elif result_type == ResultTypes.ReliabilitySAIDIResults: return ResultsTable(data=self.SAIDI_evolution, index=np.arange(len(self.SAIDI_evolution), dtype=int), columns=np.array(['SAIDI']), title=result_type.value, units="hours/customer", idx_device_type=DeviceType.NoDevice, cols_device_type=DeviceType.NoDevice, ylabel='customer_interruption_hours/customer') elif result_type == ResultTypes.ReliabilitySAIFIResults: return ResultsTable(data=self.SAIFI_evolution, index=np.arange(len(self.SAIFI_evolution), dtype=int), columns=np.array(['SAIFI']), title=result_type.value, units="interruptions/customer", idx_device_type=DeviceType.NoDevice, cols_device_type=DeviceType.NoDevice, ylabel='customer_interruptions/customer') elif result_type == ResultTypes.ReliabilityCAIDIResults: return ResultsTable(data=self.CAIDI_evolution, index=np.arange(len(self.CAIDI_evolution), dtype=int), columns=np.array(['CAIDI']), title=result_type.value, units="hours/interruption", idx_device_type=DeviceType.NoDevice, cols_device_type=DeviceType.NoDevice, ylabel='customer_interruption_hours/interruption') else: raise Exception('Result type not understood:' + str(result_type))