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

from enum import Enum
from typing import List, Tuple


class EnumComInferencia(Enum):
    """
    Classe base para os enums com inferência
    do enum a partir do valor dado
    """
    @classmethod
    def infere_valor(cls, v: int):
        """
        Construtor do enum a partir do valor
        """
        for e in cls:
            if e.value == v:
                return e
        return None


[documentos]class EnumTipoExecucao(EnumComInferencia): r""" - COMPLETA: - SIMULACAO_FINAL """ COMPLETA = 0 SIMULACAO_FINAL = 1
[documentos]class EnumTipoSimulacaoFinal(EnumComInferencia): r""" - NAO_SIMULA - SERIES_SINTETICAS - SERIE_HISTORICA - CONSISTENCIA_DADOS """ NAO_SIMULA = 0 SERIES_SINTETICAS = 1 SERIE_HISTORICA = 2 CONSISTENCIA_DADOS = 3
[documentos]class EnumImpressaoOperacao(EnumComInferencia): r""" - SINOPSE - OPERACAO_DETALHADA """ SINOPSE = 0 OPERACAO_DETALHADA = 1
[documentos]class EnumImpressaoConvergencia(EnumComInferencia): r""" - CONVERGENCIA_FINAL - CONVERGENCIA_TOTAL """ CONVERGENCIA_FINAL = 0 CONVERGENCIA_TOTAL = 1
[documentos]class EnumTamanhoArquivoVazoes(EnumComInferencia): r""" - PALAVRAS_320 - PALAVRAS_600 """ PALAVRAS_320 = 0 PALAVRAS_600 = 1
[documentos]class EnumTendenciaHidrologica(EnumComInferencia): r""" - NAO_LER - LER_POR_REE - LER_POR_POSTO """ NAO_LER = 0 LER_POR_REE = 1 LER_POR_POSTO = 2
[documentos]class EnumDuracaoPatamar(EnumComInferencia): r""" - SAZONAL - VARIAVEL_POR_ANO """ SAZONAL = 0 VARIAVEL_POR_ANO = 1
[documentos]class EnumCorrecaoEnergiaDesvio(EnumComInferencia): r""" - CONSTANTE - VARIAVEL_COM_ARMAZENAMENTO """ CONSTANTE = 0 VARIAVEL_COM_ARMAZENAMENTO = 1
[documentos]class EnumTipoGeracaoENAs(EnumComInferencia): r""" - RESIDUOS_IGUAIS_FW_BW - COMPENSACAO_CORR_CRUZADA_BW - COMPENSACAO_CORR_CRUZADA_FW_BW """ RESIDUOS_IGUAIS_FW_BW = 0 COMPENSACAO_CORR_CRUZADA_BW = 1 COMPENSACAO_CORR_CRUZADA_FW_BW = 2
[documentos]class EnumRepresentacaoSubmotorizacao(EnumComInferencia): r""" - NAO_CONSIDERA - SUBSISTEMA - USINA """ NAO_CONSIDERA = 0 SUBSISTEMA = 1 USINA = 2
[documentos]class EnumCVAR(EnumComInferencia): r""" - NAO_CONSIDERA - CONSTANTE_NO_TEMPO - VARIAVEL_NO_TEMPO """ NAO_CONSIDERA = 0 CONSTANTE_NO_TEMPO = 1 VARIAVEL_NO_TEMPO = 2
[documentos]class EnumTipoReamostragem(EnumComInferencia): r""" - RECOMBINACAO - PLENA """ RECOMBINACAO = 0 PLENA = 1
[documentos]class EnumRepresentanteAgregacao(EnumComInferencia): r""" - MAIS_PROXIMO - CENTROIDE """ MAIS_PROXIMO = 0 CENTROIDE = 1
[documentos]class EnumMatrizCorrelacaoEspacial(EnumComInferencia): r""" - ANUAL - MENSAL """ ANUAL = 0 MENSAL = 1
[documentos]class EnumMomentoReamostragem(EnumComInferencia): r""" - BW_ITER_CORRESPONDENTE - FW_ITER_CORRESPONDENTE """ BW_ITER_CORRESPONDENTE = 0 FW_ITER_CORRESPONDENTE = 1
[documentos]class EnumInicioTesteConvergencia(EnumComInferencia): r""" - PRIMEIRA_ITERACAO - ITERACAO_MINIMA """ PRIMEIRA_ITERACAO = 0 ITERACAO_MINIMA = 1
[documentos]class EnumSazonaliza(EnumComInferencia): r""" - PRE_POS_NAO_SAZONAIS - PRE_POS_SAZONAIS """ PRE_POS_NAO_SAZONAIS = 0 PRE_POS_SAZONAIS = 1
[documentos]class EnumRepresentacaoIncerteza(EnumComInferencia): r""" - NAO_REPRESENTA - HISTORICO - PARAMETROS_DISTRIBUICAO - CENARIOS """ NAO_REPRESENTA = 0 HISTORICO = 1 PARAMETROS_DISTRIBUICAO = 2 CENARIOS = 3
[documentos]class DGer: """ Classe para armazenar dados gerais de uma execução do NEWAVE. Os parâmetros são fornecidos ao construtor na mesma ordem em que são definidos no arquivo `dger.dat`. Apesar disso, não é recomendado criar um arquivo com o construtor desta classe, e sim utilizar o método `DGer.dger_padrao()`, que fornece um objeto com valores em todos os campos, que podem ser modificados. **Parâmetros** - nome_estudo : `str` - tipo_execucao: `EnumTipoExecucao` - duracao_estagio_op: `int` - num_anos_estudo: `int`, - mes_inicio_pre_estudo: `int`, - mes_inicio_estudo: `int`, - ano_inicio_estudo: `int`, - num_anos_pre_estudo: `int`, - num_anos_pos_estudo: `int`, - num_anos_pos_sim_final: `int`, - imprime_dados_usinas: `bool`, - imprime_dados_mercados: `bool`, - imprime_dados_energias: `bool`, - imprime_dados_modelo: `bool`, - imprime_dados_rees: `bool`, - max_iteracoes: `int`, - num_sim_forward: `int`, - num_aberturas: `int`, - num_series_sinteticas: `int`, - ordem_maxima_parp: `int`, - ano_inicial_vaz_historicas: `int`, - tamanho_arq_vaz_historicas: `EnumTamanhoArquivoVazoes`, - calcula_vol_inicial: `bool`, - vol_inicial_subsistema: `List[float]`, - tolerancia: `float`, - taxa_de_desconto: `float`, - tipo_simulacao_final: `EnumTipoSimulacaoFinal`, - impressao_operacao: `EnumImpressaoOperacao`, - impressao_convergencia: `EnumImpressaoConvergencia`, - intervalo_gravacao_relatorio: `int`, - min_interacoes: `int`, - racionamento_preventivo: `bool`, - numero_anos_manutencao_UTEs: `int`, - tendencia_hidrologica: `EnumTendenciaHidrologica`, - restricoes_itaipu: `bool`, - bidding_demanda: `bool`, - perdas_transmissao: `bool`, - el_nino: `bool`, - enso: `bool`, - duracao_patamar: `EnumDuracaoPatamar`, - considera_desvio_dagua: `bool`, - correcao_energia_desvio: `EnumCorrecaoEnergiaDesvio`, - considera_curva_aversao: `bool`, - tipo_geracao_afluencias: `EnumTipoGeracaoENAs`, - profundidade_risco_deficit: `Tuple[float, float]`, - iteracao_sim_final: `int`, - agrupamento_livre_interc: `bool`, - equaliza_penalidades_interc: `bool`, - representa_submotor: `EnumRepresentacaoSubmotorizacao`, - ordenacao_automatica_subsist: `bool`, - considera_cargas_adicionais: `bool`, - delta_zsup: `float`, - delta_zinf: `float`, - deltas_consecutivos: `int`, - considera_despacho_gnl: `bool`, - modifica_auto_despacho_gnl: `bool`, - considera_ghmin: `bool`, - sim_final_com_data: `bool`, - gerenciador_externo: `bool`, - comunicacao_dois_niveis: `bool`, - armazenamento_local_temp: `bool`, - aloca_memoria_enas: `bool`, - aloca_memoria_cortes: `bool`, - sar: `bool`, - cvar: `EnumCVAR`, - convergencia_minimo_zsup: `bool`, - desconsidera_vazao_minima: `bool`, - considera_restricoes_elet: `bool`, - selecao_cortes_benders: `bool`, - janela_selecao_cortes: `bool`, - reamostragem: `bool`, - tipo_reamostragem: `EnumTipoReamostragem`, - passo_reamostragem: `int`, - considera_convergencia_no0: `bool`, - consulta_fcf: `bool`, - impressao_ena: `bool`, - impressao_cortes_ativos: `bool`, - representante_agregacao: `EnumRepresentanteAgregacao`, - matriz_corr_espacial: `EnumMatrizCorrelacaoEspacial`, - desconsidera_converg_estatist: `bool`, - momento_reamostragem: `EnumMomentoReamostragem`, - mantem_arquivos_ena: `bool`, - inicio_teste_convergencia: `EnumInicioTesteConvergencia` - sazonaliza_vmint: `EnumSazonaliza` - sazonaliza_vmaxt: `EnumSazonaliza` - sazonaliza_vminp: `EnumSazonaliza` - sazonaliza_cfuga_cmont: `EnumSazonaliza` - restricoes_gee: `bool` - afluencia_anual_parp: `Tuple[bool, bool]` - incerteza_ger_eolica: `bool` - incerteza_ger_solar: `bool` - representacao_incerteza: `EnumRepresentacaoIncerteza` - restricoes_fornecimento_gas: `bool` """ def __init__(self, nome_estudo: str, tipo_execucao: EnumTipoExecucao, duracao_estagio_op: int, num_anos_estudo: int, mes_inicio_pre_estudo: int, mes_inicio_estudo: int, ano_inicio_estudo: int, num_anos_pre_estudo: int, num_anos_pos_estudo: int, num_anos_pos_sim_final: int, imprime_dados_usinas: bool, imprime_dados_mercados: bool, imprime_dados_energias: bool, imprime_dados_modelo: bool, imprime_dados_rees: bool, max_iteracoes: int, num_sim_forward: int, num_aberturas: int, num_series_sinteticas: int, ordem_maxima_parp: int, ano_inicial_vaz_historicas: int, tamanho_arq_vaz_historicas: EnumTamanhoArquivoVazoes, calcula_vol_inicial: bool, vol_inicial_subsistema: List[float], tolerancia: float, taxa_de_desconto: float, tipo_simulacao_final: EnumTipoSimulacaoFinal, impressao_operacao: EnumImpressaoOperacao, impressao_convergencia: EnumImpressaoConvergencia, intervalo_gravacao_relatorio: int, min_interacoes: int, racionamento_preventivo: bool, numero_anos_manutencao_UTEs: int, tendencia_hidrologica: EnumTendenciaHidrologica, restricoes_itaipu: bool, bidding_demanda: bool, perdas_transmissao: bool, el_nino: bool, enso: bool, duracao_patamar: EnumDuracaoPatamar, considera_desvio_dagua: bool, correcao_energia_desvio: EnumCorrecaoEnergiaDesvio, considera_curva_aversao: bool, tipo_geracao_afluencias: EnumTipoGeracaoENAs, profundidade_risco_deficit: Tuple[float, float], iteracao_sim_final: int, agrupamento_livre_interc: bool, equaliza_penalidades_interc: bool, representa_submotor: EnumRepresentacaoSubmotorizacao, ordenacao_automatica_subsist: bool, considera_cargas_adicionais: bool, delta_zsup: float, delta_zinf: float, deltas_consecutivos: int, considera_despacho_gnl: bool, modifica_auto_despacho_gnl: bool, considera_ghmin: bool, sim_final_com_data: bool, gerenciador_externo: bool, comunicacao_dois_niveis: bool, armazenamento_local_temp: bool, aloca_memoria_enas: bool, aloca_memoria_cortes: bool, sar: bool, cvar: EnumCVAR, convergencia_minimo_zsup: bool, desconsidera_vazao_minima: bool, considera_restricoes_elet: bool, selecao_cortes_benders: bool, janela_selecao_cortes: bool, reamostragem: bool, tipo_reamostragem: EnumTipoReamostragem, passo_reamostragem: int, considera_convergencia_no0: bool, consulta_fcf: bool, impressao_ena: bool, impressao_cortes_ativos: bool, representante_agregacao: EnumRepresentanteAgregacao, matriz_corr_espacial: EnumMatrizCorrelacaoEspacial, desconsidera_converg_estatist: bool, momento_reamostragem: EnumMomentoReamostragem, mantem_arquivos_ena: bool, inicio_teste_convergencia: EnumInicioTesteConvergencia, sazonaliza_vmint: EnumSazonaliza, sazonaliza_vmaxt: EnumSazonaliza, sazonaliza_vminp: EnumSazonaliza, sazonaliza_cfuga_cmont: EnumSazonaliza, restricoes_gee: bool, afluencia_anual_parp: Tuple[bool, bool], incerteza_ger_eolica: bool, incerteza_ger_solar: bool, representacao_incerteza: EnumRepresentacaoIncerteza, restricoes_fornecimento_gas: bool ): self.nome_estudo = nome_estudo self.tipo_execucao = tipo_execucao self.duracao_estagio_op = duracao_estagio_op self.num_anos_estudo = num_anos_estudo self.mes_inicio_pre_estudo = mes_inicio_pre_estudo self.mes_inicio_estudo = mes_inicio_estudo self.ano_inicio_estudo = ano_inicio_estudo self.num_anos_pre_estudo = num_anos_pre_estudo self.num_anos_pos_estudo = num_anos_pos_estudo self.num_anos_pos_sim_final = num_anos_pos_sim_final self.imprime_dados_usinas = imprime_dados_usinas self.imprime_dados_mercados = imprime_dados_mercados self.imprime_dados_energias = imprime_dados_energias self.imprime_dados_modelo = imprime_dados_modelo self.imprime_dados_rees = imprime_dados_rees self.max_iteracoes = max_iteracoes self.num_sim_forward = num_sim_forward self.num_aberturas = num_aberturas self.num_series_sinteticas = num_series_sinteticas self.ordem_maxima_parp = ordem_maxima_parp self.ano_inicial_vaz_historicas = ano_inicial_vaz_historicas self.tamanho_arq_vaz_historicas = tamanho_arq_vaz_historicas self.calcula_vol_inicial = calcula_vol_inicial self.vol_inicial_subsistema = vol_inicial_subsistema self.tolerancia = tolerancia self.taxa_de_desconto = taxa_de_desconto self.tipo_simulacao_final = tipo_simulacao_final self.impressao_operacao = impressao_operacao self.impressao_convergencia = impressao_convergencia self.intervalo_gravacao_relatorio = intervalo_gravacao_relatorio self.min_interacoes = min_interacoes self.racionamento_preventivo = racionamento_preventivo self.numero_anos_manutencao_UTEs = numero_anos_manutencao_UTEs self.tendencia_hidrologica = tendencia_hidrologica self.restricoes_itaipu = restricoes_itaipu self.bidding_demanda = bidding_demanda self.perdas_transmissao = perdas_transmissao self.el_nino = el_nino self.enso = enso self.duracao_patamar = duracao_patamar self.considera_desvio_dagua = considera_desvio_dagua self.correcao_energia_desvio = correcao_energia_desvio self.considera_curva_aversao = considera_curva_aversao self.tipo_geracao_afluencias = tipo_geracao_afluencias self.profundidade_risco_deficit = profundidade_risco_deficit self.iteracao_sim_final = iteracao_sim_final self.agrupamento_livre_interc = agrupamento_livre_interc self.equaliza_penalidades_interc = equaliza_penalidades_interc self.representa_submotor = representa_submotor self.ordenacao_automatica_subsist = ordenacao_automatica_subsist self.considera_cargas_adicionais = considera_cargas_adicionais self.delta_zsup = delta_zsup self.delta_zinf = delta_zinf self.deltas_consecutivos = deltas_consecutivos self.considera_despacho_gnl = considera_despacho_gnl self.modifica_auto_despacho_gnl = modifica_auto_despacho_gnl self.considera_ghmin = considera_ghmin self.sim_final_com_data = sim_final_com_data self.gerenciador_externo = gerenciador_externo self.comunicacao_dois_niveis = comunicacao_dois_niveis self.armazenamento_local_temp = armazenamento_local_temp self.aloca_memoria_enas = aloca_memoria_enas self.aloca_memoria_cortes = aloca_memoria_cortes self.sar = sar self.cvar = cvar self.convergencia_minimo_zsup = convergencia_minimo_zsup self.desconsidera_vazao_minima = desconsidera_vazao_minima self.considera_restricoes_elet = considera_restricoes_elet self.selecao_cortes_benders = selecao_cortes_benders self.janela_selecao_cortes = janela_selecao_cortes self.reamostragem = reamostragem self.tipo_reamostragem = tipo_reamostragem self.passo_reamostragem = passo_reamostragem self.considera_convergencia_no0 = considera_convergencia_no0 self.consulta_fcf = consulta_fcf self.impressao_ena = impressao_ena self.impressao_cortes_ativos = impressao_cortes_ativos self.representante_agregacao = representante_agregacao self.matriz_corr_espacial = matriz_corr_espacial self.desconsidera_converg_estatist = desconsidera_converg_estatist self.momento_reamostragem = momento_reamostragem self.mantem_arquivos_ena = mantem_arquivos_ena self.inicio_teste_convergencia = inicio_teste_convergencia self.sazonaliza_vmint = sazonaliza_vmint self.sazonaliza_vmaxt = sazonaliza_vmaxt self.sazonaliza_vminp = sazonaliza_vminp self.sazonaliza_cfuga_cmont = sazonaliza_cfuga_cmont self.restricoes_gee = restricoes_gee self.afluencia_anual_parp = afluencia_anual_parp self.incerteza_ger_eolica = incerteza_ger_eolica self.incerteza_ger_solar = incerteza_ger_solar self.representacao_incerteza = representacao_incerteza self.restricoes_fornecimento_gas = restricoes_fornecimento_gas def __eq__(self, o: object) -> bool: """ A igualdade entre DGer avalia todos os campos, menos o nome do estudo. """ if not isinstance(o, DGer): return False dger: DGer = o dif = False for (k, u), (_, v) in zip(self.__dict__.items(), dger.__dict__.items()): if k == "nome_estudo": continue if u != v: dif = True return not dif
[documentos] def eq_eco_saida(self, o: object) -> bool: """ Compara o eco de saída do DGer em um `pmo.dat` com o DGer dado como entrada. ** Parâmetros ** - o: `DGer` ** Sobre ** A igualdade entre DGer no eco de saída ignora alguns campos. """ if not isinstance(o, DGer): return False dger: DGer = o dif = False campos_ignorados = ["nome_estudo", "tipo_execucao", "restricoes_itaipu", "tamanho_arq_vaz", "vol_inicial_subsistema", "tendencia_hidrologica", "tipo_simulacao_final", "intervalo_gravacao_relatorio", "bidding_demanda", "el_nino", "enso", "duracao_patamar", "tipo_geracao_afluencias", "profundidade_risco_deficit", "iteracao_sim_final", "sim_final_com_data", "convergencia_minimo_zsup", "representacao_incerteza"] for (k, u), (_, v) in zip(self.__dict__.items(), dger.__dict__.items()): if k in campos_ignorados: continue if u != v: dif = True return not dif
[documentos] @classmethod def dger_padrao(cls): """ Retorna um DGer padrão, com valores em todos os campos. Devido ao grande número de parâmetros do objeto DGer, este método se fez necessário para possibilitar a geração de objetos de dados gerais em larga escala sem precisar configurar cada um dos parâmetros necessários no construtor. Desta forma, um objeto DGer pode ser instanciado e ter apenas os parâmetros que forem de interesse do usuário modificados, facilitando a realização de estudos. **Exemplos** >>> dger_com_sar = DGer.dger_padrao() >>> print(dger_padrao.sar) False >>> dger_com_sar.sar = True >>> print(dger_padrao.sar) True """ return DGer("", EnumTipoExecucao.COMPLETA, 1, 5, 1, 1, 2021, 0, 5, 0, True, True, True, True, True, 45, 200, 20, 2000, 6, 1931, EnumTamanhoArquivoVazoes.PALAVRAS_320, True, [0., 0., 0., 0.], 95.0, 12.0, EnumTipoSimulacaoFinal.SERIES_SINTETICAS, EnumImpressaoOperacao.OPERACAO_DETALHADA, EnumImpressaoConvergencia.CONVERGENCIA_TOTAL, 1, 30, False, 1, EnumTendenciaHidrologica.LER_POR_POSTO, False, False, False, False, False, EnumDuracaoPatamar.VARIAVEL_POR_ANO, True, EnumCorrecaoEnergiaDesvio.VARIAVEL_COM_ARMAZENAMENTO, True, EnumTipoGeracaoENAs.RESIDUOS_IGUAIS_FW_BW, (1.0, 2.5), 0, True, True, EnumRepresentacaoSubmotorizacao.USINA, False, True, 10.0, 0.2, 3, True, True, True, False, False, False, False, False, False, False, True, False, False, True, True, False, True, EnumTipoReamostragem.PLENA, 0, False, False, False, False, EnumRepresentanteAgregacao.CENTROIDE, EnumMatrizCorrelacaoEspacial.MENSAL, True, EnumMomentoReamostragem.FW_ITER_CORRESPONDENTE, False, EnumInicioTesteConvergencia.ITERACAO_MINIMA, EnumSazonaliza.PRE_POS_NAO_SAZONAIS, EnumSazonaliza.PRE_POS_NAO_SAZONAIS, EnumSazonaliza.PRE_POS_NAO_SAZONAIS, EnumSazonaliza.PRE_POS_NAO_SAZONAIS, False, (True, False), False, False, EnumRepresentacaoIncerteza.NAO_REPRESENTA, False )