예제 #1
0
파일: relato.py 프로젝트: rjmalves/idecomp
 def le_tabela(linha: str) -> np.ndarray:
     indice_ree = int(linha.split("REE: ")[1].split("-")[0].strip())
     ree = linha.split("REE: ")[1].split("/")[0].split("-")[1].strip()
     subsis = linha.split("SUBSISTEMA: ")[1].split("-")[1].strip()
     # Salta uma linha para identificar o número de estágios
     arq.readline()
     lin = arq.readline()
     sems = [
         s for s in lin.split(" ")
         if (len(s) > 0 and ("Sem" in s or "Mes" in s))
     ]
     n_semanas = len(sems)
     arq.readline()
     # Começa a ler os cenários
     reg_cen = RegistroIn(3)
     reg_ena = RegistroFn(8)
     tab = np.zeros((1000, n_semanas + 1))
     i = 0
     while True:
         lin = arq.readline()
         if len(lin) < 4:
             tab = tab[:i, :]
             break
         tab[i, 0] = reg_cen.le_registro(lin, 4)
         tab[i, 1:] = reg_ena.le_linha_tabela(lin, 8, 1, n_semanas)
         indices_rees.append(indice_ree)
         rees.append(ree)
         subsistemas.append(subsis)
         i += 1
     return tab
예제 #2
0
파일: relato.py 프로젝트: rjmalves/idecomp
    def le(self, arq: IO):
        def converte_tabela_em_df() -> pd.DataFrame:
            df = pd.DataFrame(tabela)
            cols = ["Earmax"] + [f"Estágio Pré {s}" for s in range(1, 6)]
            df.columns = cols
            df["Subsistema"] = subsistemas
            df = df[["Subsistema"] + cols]
            # Remove as colunas preenchidas com 0
            for c in cols:
                if df[c].max() == 0:
                    df.drop(columns=c, inplace=True)
            return df

        # Salta 4 linhas
        for _ in range(4):
            arq.readline()
        reg_ssis = RegistroAn(14)
        reg_ena = RegistroFn(8)
        subsistemas: List[str] = []
        tabela = np.zeros((MAX_SUBSISTEMAS, 6))
        i = 0
        while True:
            # Confere se a leitura não acabou
            linha = arq.readline()
            if "X--------------X" in linha:
                tabela = tabela[:i, :]
                self._dados = converte_tabela_em_df()
                break
            # Senão, lê mais uma linha
            # Subsistema e REE
            ssis = reg_ssis.le_registro(linha, 4)
            subsistemas.append(ssis)
            # Semanas
            tabela[i, :] = reg_ena.le_linha_tabela(linha, 24, 1, 6)
            i += 1
예제 #3
0
파일: relato.py 프로젝트: rjmalves/idecomp
    def le(self, arq: IO):
        def converte_tabela_em_df() -> pd.DataFrame:
            df = pd.DataFrame(tabela)
            cols = ["Earmax"] + [f"Estágio Pré {s}" for s in range(1, 12)]
            df.columns = cols
            df["REE"] = rees
            df = df[["REE"] + cols]
            return df

        # Salta 4 linhas
        for _ in range(4):
            arq.readline()
        reg_ree = RegistroAn(14)
        reg_ena = RegistroFn(8)
        rees: List[str] = []
        tabela = np.zeros((20, 12))
        i = 0
        while True:
            # Confere se a leitura não acabou
            linha = arq.readline()
            if "X--------------X" in linha:
                tabela = tabela[:i, :]
                self._dados = converte_tabela_em_df()
                break
            # Senão, lê mais uma linha
            # Subsistema e REE
            ssis = reg_ree.le_registro(linha, 4)
            rees.append(ssis)
            # Semanas
            tabela[i, :] = reg_ena.le_linha_tabela(linha, 29, 1, 12)
            i += 1
예제 #4
0
파일: relato.py 프로젝트: rjmalves/idecomp
    def le(self, arq: IO):
        def converte_tabela_em_df() -> pd.DataFrame:
            cols = [
                "GT Min Pat. 1", "GT Max Pat. 1", "Custo Pat. 1",
                "GT Min Pat. 2", "GT Max Pat. 2", "Custo Pat. 2",
                "GT Min Pat. 3", "GT Max Pat. 3", "Custo Pat. 3"
            ]
            df = pd.DataFrame(tabela, columns=cols)
            df["Código"] = numeros
            df["Usina"] = usinas
            df["Subsistema"] = subsistemas
            df["Estágio"] = estagios
            df = df[["Código", "Usina", "Subsistema", "Estágio"] + cols]
            return df

        # Salta as linhas de cabeçalho
        for _ in range(4):
            arq.readline()

        reg_num = RegistroIn(3)
        reg_usina = RegistroAn(10)
        reg_subsis = RegistroAn(6)
        reg_estagio = RegistroIn(7)
        reg_valores = RegistroFn(7)
        numeros: List[int] = []
        usinas: List[str] = []
        subsistemas: List[str] = []
        estagios: List[int] = []

        tabela = np.zeros((5000, 9))

        i = 0
        num_atual = 0
        usina_atual = ""
        subsis_atual = ""
        while True:
            # Confere se a leitura não acabou
            linha = arq.readline()
            if "X---X----------X" in linha:
                tabela = tabela[:i, :]
                self._dados = converte_tabela_em_df()
                break
            # Senão, lê mais uma linha
            # Verifica se começa uma nova UTE na linha
            if len(linha[4:7].strip()) > 0:
                num_atual = reg_num.le_registro(linha, 4)
                usina_atual = reg_usina.le_registro(linha, 8)
                subsis_atual = reg_subsis.le_registro(linha, 19)
            # Lê as propriedades existentes em todas as linhas
            numeros.append(num_atual)
            usinas.append(usina_atual)
            subsistemas.append(subsis_atual)
            estagios.append(reg_estagio.le_registro(linha, 26))
            tabela[i, :] = reg_valores.le_linha_tabela(linha, 34, 1, 9)
            i += 1
예제 #5
0
파일: relato.py 프로젝트: rjmalves/idecomp
    def le(self, arq: IO):
        def converte_tabela_para_df() -> pd.DataFrame:
            df = pd.DataFrame(tabela)
            cols = [
                "Mercado", "Bacia", "Cbomba", "Ghid", "Gter", "GterAT",
                "Deficit", "Compra", "Venda", "Itaipu50", "Itaipu60"
            ]
            df.columns = cols
            df["Subsistema"] = subsistemas
            df = df[["Subsistema"] + cols]
            return df

        # Variáveis auxiliares
        reg_tabela = RegistroFn(7)
        str_subsis = "     Subsistema"
        str_medio = "    Medio"
        subsis = "FC"
        subsistemas = []
        # Salta uma linha e extrai a semana
        tabela = np.zeros((MAX_ESTAGIOS * MAX_SUBSISTEMAS, 11))
        i = 0
        while True:
            linha = arq.readline()
            # Verifica se acabou
            if BlocoBalancoEnergeticoRelato.str_fim in linha:
                tabela = tabela[:i, :]
                self._dados = converte_tabela_para_df()
                break
            # Senão, procura a linha que identifica o subsistema
            if str_subsis in linha:
                subsis = linha.split(str_subsis)[1][:3].strip()
            # Se está lendo um subsistema e achou a linha de valores médios
            if subsis != "FC" and str_medio in linha:
                subsistemas.append(subsis)
                tabela[i, :9] = reg_tabela.le_linha_tabela(linha, 10, 1, 9)
                # TODO - Começar a ler a interligação
                # Para o SE, lê as gerações de Itaipu50 e Itaipu60
                if subsis == "SE":
                    tabela[i, 9:] = reg_tabela.le_linha_tabela(linha, 96, 1, 2)
                # Reseta o indicador de subsistema
                subsis = "FC"
                i += 1
예제 #6
0
파일: relgnl.py 프로젝트: rjmalves/idecomp
    def le(self, arq: IO):
        def converte_tabela_em_df() -> pd.DataFrame:
            colunas = [
                "GT Min Pat 1", "GT Max Pat 1", "Custo GT Pat 1",
                "GT Min Pat 2", "GT Max Pat 2", "Custo GT Pat 2",
                "GT Min Pat 3", "GT Max Pat 3", "Custo GT Pat 3"
            ]
            df = pd.DataFrame(tabela, columns=colunas)
            df["Código"] = numeros
            df["Usina"] = usinas
            df["Subsistema"] = subsistemas
            df["Estágio"] = estagios
            df = df[["Código", "Usina", "Subsistema", "Estágio"] + colunas]
            return df

        # Pula 4 linhas
        for _ in range(4):
            arq.readline()
        # Variáveis auxiliares
        reg_num = RegistroIn(3)
        reg_nome = RegistroAn(10)
        reg_subsis = RegistroAn(6)
        reg_estagio = RegistroIn(7)
        reg_valores = RegistroFn(7)
        numeros: List[int] = []
        usinas: List[str] = []
        subsistemas: List[str] = []
        estagios: List[int] = []
        tabela = np.zeros((2000, 9))
        numero_atual = 0
        usina_atual = ""
        subsistema_atual = ""
        i = 0
        while True:
            linha: str = arq.readline()
            if BlocoDadosUsinasRelGNL.str_fim in linha:
                tabela = tabela[:i, :]
                self._dados = converte_tabela_em_df()
                break
            if linha[4:7].strip().isnumeric():
                numero_atual = reg_num.le_registro(linha, 4)
            if len(linha[8:18].strip()) > 0:
                usina_atual = reg_nome.le_registro(linha, 8)
            if len(linha[19:26].strip()) > 0:
                subsistema_atual = reg_subsis.le_registro(linha, 19)
            numeros.append(numero_atual)
            usinas.append(usina_atual)
            subsistemas.append(subsistema_atual)
            estagios.append(reg_estagio.le_registro(linha, 26))
            tabela[i, :] = reg_valores.le_linha_tabela(linha, 34, 1, 9)
            i += 1
예제 #7
0
파일: relato.py 프로젝트: rjmalves/idecomp
    def le(self, arq: IO):
        def converte_tabela_em_df() -> pd.DataFrame:
            df = pd.DataFrame(tabela)
            cols = ["Inicial"
                    ] + [f"Estágio {s}" for s in range(1, n_semanas + 1)]
            df.columns = cols
            df["Usina"] = usinas
            df["Número"] = numeros
            df = df[["Número", "Usina"] + cols]
            return df

        # Salta duas linhas
        arq.readline()
        arq.readline()
        # Descobre o número de semanas
        linha = arq.readline()
        sems = [
            s for s in linha.split(" ")
            if (len(s) > 0 and ("Sem" in s or "Mes" in s))
        ]
        reg_usina = RegistroAn(12)
        reg_numero = RegistroIn(4)
        reg_vol = RegistroFn(6)
        n_semanas = len(sems)
        usinas: List[str] = []
        numeros: List[int] = []
        tabela = np.zeros((300, n_semanas + 1))
        # Salta outra linha
        arq.readline()
        i = 0
        while True:
            # Confere se a leitura não acabou
            linha = arq.readline()
            if "X-------X" in linha:
                tabela = tabela[:i, :]
                self._dados = converte_tabela_em_df()
                break
            # Senão, lê mais uma linha
            # Subsistema e REE
            numero = reg_numero.le_registro(linha, 4)
            usina = reg_usina.le_registro(linha, 9)
            numeros.append(numero)
            usinas.append(usina)
            # Semanas
            tabela[i, :] = reg_vol.le_linha_tabela(linha, 23, 1, n_semanas + 1)
            i += 1
예제 #8
0
파일: relgnl.py 프로젝트: rjmalves/idecomp
    def le(self, arq: IO):
        def converte_tabela_em_df() -> pd.DataFrame:
            colunas = ["Pat 1", "Pat 2", "Pat 3"]
            df = pd.DataFrame(tabela, columns=colunas)
            df["Código"] = numeros
            df["Usina"] = usinas
            df["Lag"] = lags
            df["Subsistema"] = subsistemas
            df["Período"] = periodos
            df = df[["Código", "Usina", "Lag", "Subsistema", "Período"] +
                    colunas]
            return df

        # Pula 4 linhas
        for _ in range(4):
            arq.readline()
        # Variáveis auxiliares
        reg_num = RegistroIn(3)
        reg_nome = RegistroAn(10)
        reg_subsis = RegistroAn(6)
        reg_lag = RegistroIn(3)
        reg_periodo = RegistroIn(9)
        reg_valores = RegistroFn(10)
        numeros: List[int] = []
        usinas: List[str] = []
        subsistemas: List[str] = []
        periodos: List[int] = []
        lags: List[int] = []
        tabela = np.zeros((2000, 3))
        i = 0
        while True:
            linha: str = arq.readline()
            if len(linha) < 3:
                tabela = tabela[:i, :]
                self._dados = converte_tabela_em_df()
                break
            numeros.append(reg_num.le_registro(linha, 3))
            usinas.append(reg_nome.le_registro(linha, 8))
            lags.append(reg_lag.le_registro(linha, 20))
            subsistemas.append(reg_subsis.le_registro(linha, 24))
            periodos.append(reg_periodo.le_registro(linha, 31))
            tabela[i, :] = reg_valores.le_linha_tabela(linha, 41, 1, 3)
            i += 1
예제 #9
0
파일: relato.py 프로젝트: rjmalves/idecomp
    def le(self, arq: IO):
        def converte_tabela_em_df() -> pd.DataFrame:
            df = pd.DataFrame(tabela)
            cols = [f"Estágio {s}" for s in range(1, n_semanas + 1)]
            df.columns = cols
            df["Subsistema"] = subsistemas
            df["Patamar"] = patamares
            df = df[["Subsistema", "Patamar"] + cols]
            return df

        # Salta uma linha
        arq.readline()
        # Descobre o número de semanas
        linha = arq.readline()
        sems = [
            s for s in linha.split(" ")
            if (len(s) > 0 and ("Sem" in s or "Mes" in s))
        ]
        reg_pat = RegistroAn(6)
        reg_cmo = RegistroFn(10)
        n_semanas = len(sems)
        subsistemas: List[str] = []
        patamares: List[str] = []
        tabela = np.zeros((4 * len(SUBSISTEMAS), n_semanas))
        # Salta outra linha
        arq.readline()
        i = 0
        while True:
            # Confere se a leitura não acabou
            linha = arq.readline()
            if "X------X" in linha:
                self._dados = converte_tabela_em_df()
                break
            # Senão, lê mais uma linha
            # Subsistema e patamar
            ssis = SUBSISTEMAS[int(i / 4)]
            str_pat = reg_pat.le_registro(linha, 4)
            pat = "Médio" if "Med" in str_pat else str_pat.split("_")[1]
            subsistemas.append(ssis)
            patamares.append(pat)
            # Semanas
            tabela[i, :] = reg_cmo.le_linha_tabela(linha, 11, 1, n_semanas)
            i += 1
예제 #10
0
파일: relato.py 프로젝트: rjmalves/idecomp
    def le(self, arq: IO):
        def converte_tabela_em_df() -> pd.DataFrame:
            cols = [
                "Patamar 1", "Mercado 1", "Patamar 2", "Mercado 2",
                "Patamar 3", "Mercado 3"
            ]
            df = pd.DataFrame(tabela, columns=cols)
            df["Estágio"] = estagios
            df["Subsistema"] = subsistemas
            df = df[["Estágio", "Subsistema"] + cols]
            return df

        # Salta as linhas de cabeçalho
        for _ in range(4):
            arq.readline()

        reg_estagio = RegistroIn(9)
        reg_subsis = RegistroAn(6)
        reg_valores = RegistroFn(9)
        estagios: List[int] = []
        subsistemas: List[str] = []

        tabela = np.zeros((100, 6))

        i = 0
        estagio_atual = 0
        while True:
            # Confere se a leitura não acabou
            linha = arq.readline()
            if "X---------X------X" in linha:
                tabela = tabela[:i, :]
                self._dados = converte_tabela_em_df()
                break
            # Senão, lê mais uma linha
            # Verifica se começa um novo estágio na linha
            if len(linha[4:13].strip()) > 0:
                estagio_atual = reg_estagio.le_registro(linha, 4)
            # Lê as propriedades existentes em todas as linhas
            estagios.append(estagio_atual)
            subsistemas.append(reg_subsis.le_registro(linha, 14))
            tabela[i, :] = reg_valores.le_linha_tabela(linha, 21, 1, 6)
            i += 1
예제 #11
0
파일: relato.py 프로젝트: rjmalves/idecomp
    def le(self, arq: IO):
        def converte_tabela_em_df() -> pd.DataFrame:
            cols = [f"Estágio {i}" for i in range(1, n_semanas + 1)]
            df = pd.DataFrame(tabela, columns=cols)
            df["Código"] = numeros
            df["Usina"] = usinas
            df = df[["Código", "Usina"] + cols]
            return df

        # Salta uma linha
        arq.readline()

        # Descobre o número de estágios
        linha = arq.readline()
        sems = [
            s for s in linha.split(" ")
            if (len(s) > 0 and ("Sem" in s or "Mes" in s))
        ]
        n_semanas = len(sems)

        reg_num = RegistroIn(3)
        reg_usina = RegistroAn(12)
        reg_valores = RegistroFn(6)
        numeros: List[int] = []
        usinas: List[str] = []
        tabela = np.zeros((300, n_semanas))

        # Salta outra linha
        arq.readline()
        i = 0
        while True:
            # Confere se a leitura não acabou
            linha = arq.readline()
            if "X---X------------X" in linha:
                tabela = tabela[:i, :]
                self._dados = converte_tabela_em_df()
                break
            # Senão, lê mais uma linha
            numeros.append(reg_num.le_registro(linha, 4))
            usinas.append(reg_usina.le_registro(linha, 8))
            tabela[i, :] = reg_valores.le_linha_tabela(linha, 21, 1, n_semanas)
            i += 1
예제 #12
0
파일: relato.py 프로젝트: rjmalves/idecomp
    def le(self, arq: IO):
        def converte_tabela_em_df() -> pd.DataFrame:
            df = pd.DataFrame(tabela)
            cols = ["Inicial"
                    ] + [f"Estágio {s}" for s in range(1, n_semanas + 1)]
            df.columns = cols
            df["Subsistema"] = subsistemas
            df = df[["Subsistema"] + cols]
            return df

        # Salta uma linha
        arq.readline()
        # Descobre o número de semanas
        linha = arq.readline()
        sems = [
            s for s in linha.split(" ")
            if (len(s) > 0 and ("Sem" in s or "Mes" in s))
        ]
        reg_ssis = RegistroAn(12)
        reg_earm = RegistroFn(6)
        n_semanas = len(sems)
        subsistemas: List[str] = []
        tabela = np.zeros((MAX_SUBSISTEMAS, n_semanas + 1))
        # Salta outra linha
        arq.readline()
        i = 0
        while True:
            # Confere se a leitura não acabou
            linha = arq.readline()
            if "X------------X" in linha:
                tabela = tabela[:i, :]
                self._dados = converte_tabela_em_df()
                break
            # Senão, lê mais uma linha
            # Subsistema e REE
            ssis = reg_ssis.le_registro(linha, 4)
            subsistemas.append(ssis)
            # Semanas
            tabela[i, :] = reg_earm.le_linha_tabela(linha, 23, 1,
                                                    n_semanas + 1)
            i += 1
예제 #13
0
파일: relato.py 프로젝트: rjmalves/idecomp
    def le(self, arq: IO):
        def converte_tabela_para_df() -> pd.DataFrame:
            cols = [
                "Volume Ini (% V.U)", "Volume Fin (% V.U)",
                "Volume Esp. (% V.U)", "Qnat (m3/s)", "Qnat (% MLT)",
                "Qafl (m3/s)", "Qdef (m3/s)", "Geração Pat 1", "Geração Pat 2",
                "Geração Pat 3", "Geração Média", "Vertimento Turbinável",
                "Vertimento Não-Turbinável", "Ponta", "FPCGC"
            ]
            df = pd.DataFrame(tabela, columns=cols)
            cols_adic = [
                "Código", "Usina", "Evaporação", "Tempo de Viagem",
                "Cota Abaixo da Crista do Vert", "Def. Mínima = 0"
            ]
            df["Código"] = numeros
            df["Usina"] = usinas
            df["Evaporação"] = evaporacao
            df["Tempo de Viagem"] = tv_afluencia
            df["Cota Abaixo da Crista do Vert"] = cota_abaixo_crista
            df["Def. Mínima = 0"] = def_minima_zero
            df = df[cols_adic + cols]
            return df

        def le_se_tem_valor(digitos: int, linha: str, coluna_inicio: int):
            coluna_fim = coluna_inicio + digitos
            trecho = linha[coluna_inicio:coluna_fim].strip()
            valor = None
            if len(trecho) > 0 and "---" not in trecho:
                reg = RegistroFn(digitos)
                valor = reg.le_registro(linha, coluna_inicio)
            else:
                valor = np.nan
            return valor

        # Salta duas linhas
        arq.readline()
        arq.readline()
        # Variáveis auxiliares
        reg_numero = RegistroIn(4)
        reg_usina = RegistroAn(12)
        reg_flags = RegistroAn(4)
        reg_volume = RegistroFn(5)
        reg_tabela = RegistroFn(7)
        numeros: List[int] = []
        usinas: List[str] = []
        evaporacao: List[bool] = []
        tv_afluencia: List[bool] = []
        cota_abaixo_crista: List[bool] = []
        def_minima_zero: List[bool] = []
        # Salta uma linha e extrai a semana
        tabela = np.zeros((300, 15))
        i = 0
        while True:
            linha: str = arq.readline()
            # Verifica se acabou
            if BlocoRelatorioOperacaoUHERelato.str_fim in linha:
                tabela = tabela[:i, :]
                self._dados = converte_tabela_para_df()
                break
            numeros.append(reg_numero.le_registro(linha, 4))
            usinas.append(reg_usina.le_registro(linha, 9))
            flags = reg_flags.le_registro(linha, 22)
            evaporacao.append("#" in flags)
            tv_afluencia.append("*" in flags)
            cota_abaixo_crista.append("@" in flags)
            def_minima_zero.append("$" in flags)
            tem_volume = len(linha[27:33].strip()) > 0
            if tem_volume:
                tabela[i, :3] = reg_volume.le_linha_tabela(linha, 27, 1, 3)
            else:
                tabela[i, :3] = np.nan
            tabela[i, 3] = le_se_tem_valor(7, linha, 45)
            tabela[i, 4] = le_se_tem_valor(6, linha, 54)
            tabela[i, 5] = le_se_tem_valor(7, linha, 63)
            tabela[i, 6:11] = reg_tabela.le_linha_tabela(linha, 72, 5, 1)
            tabela[i, 11] = le_se_tem_valor(7, linha, 112)
            tabela[i, 12] = le_se_tem_valor(7, linha, 120)
            tabela[i, 13] = le_se_tem_valor(7, linha, 128)
            tabela[i, 14] = le_se_tem_valor(7, linha, 136)
            i += 1