Código fonte para inewave.newave.modelos.patamar

from typing import List, Dict
import numpy as np  # type: ignore
from inewave.config import MESES


[documentos]class Patamar: """ Armazena os dados de entrada do NEWAVE referentes aos patamares de carga por submercado. Esta classe pode lidar com um número qualquer de patamares de carga, desde que as informações fornecidas a ela por meio da tabela de valores seja compatível com o parâmetro `num_patamares` da mesma. A tabela de patamares de carga é armazenada através de uma array em `NumPy`, para otimizar cálculos futuros e espaço ocupado em memória. A tabela interna é transformada em dicionários e outras estruturas de dados mais palpáveis através das propriedades da própria classe. **Parâmetros** - num_patamares: `int` - anos_estudo: `List[int]` - paramares: `np.ndarray` """ def __init__(self, num_patamares: int, anos_estudo: List[int], patamares: np.ndarray): self.num_patamares = num_patamares self.anos_estudo = anos_estudo self.patamares = patamares def __eq__(self, o: object) -> bool: """ A igualdade entre Patamar avalia todos os campos. """ if not isinstance(o, Patamar): return False pat: Patamar = o eq_num = self.num_patamares == pat.num_patamares eq_anos = self.anos_estudo == pat.anos_estudo eq_pats = np.array_equal(self.patamares, pat.patamares) return eq_num and eq_anos and eq_pats @property def patamares_por_ano(self) -> Dict[int, np.ndarray]: """ Valores contidos na tabela de patamares, organizados por ano. **Retorna** `Dict[int, np.ndarray]` **Sobre** O acesso é feito com [ano] e o valor fornecido é uma array 2-D do `NumPy` com os valores dos patamares para todo os meses de um ano, semelhante a uma linha do arquivo patamar.dat. """ patamares_ano: Dict[int, np.ndarray] = {} # Preenche com os valores for i, a in enumerate(self.anos_estudo): li = self.num_patamares * i lf = li + self.num_patamares patamares_ano[a] = self.patamares[li:lf, :] return patamares_ano @property def patamares_por_ano_e_mes(self) -> Dict[int, Dict[int, np.ndarray]]: """ Valores contidos na tabela de patamares, organizados por ano e mês. **Retorna** `Dict[int, Dict[int, np.ndarray]]` **Sobre** O acesso é feito com [ano][mes] e o valor fornecido é uma array do numpy com os valores para os patamares 1, 2, ... . """ patamares_ano: Dict[int, Dict[int, np.ndarray]] = {} n_meses = len(MESES) # Cria e inicializa os objetos for a in self.anos_estudo: patamares_ano[a] = {m: np.zeros(self.num_patamares,) for m in range(1, n_meses + 1)} # Preenche com os valores for i, a in enumerate(self.anos_estudo): for m in range(1, n_meses + 1): li = self.num_patamares * i lf = li + self.num_patamares col = m - 1 patamares_ano[a][m] = self.patamares[li:lf, col] return patamares_ano