inewave 1.10.2__py3-none-any.whl → 1.10.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
inewave/__init__.py CHANGED
@@ -6,7 +6,7 @@ inewave é um módulo em Python para manipulação dos arquivos de entrada
6
6
  e saída do NEWAVE.
7
7
  """
8
8
 
9
- __version__ = "1.10.2"
9
+ __version__ = "1.10.4"
10
10
 
11
11
  from . import newave # noqa
12
12
  from . import nwlistcf # noqa
@@ -166,20 +166,34 @@ def formata_df_meses_para_datas_nwlistop(df: pd.DataFrame) -> pd.DataFrame:
166
166
  }
167
167
  return mapa_formatacao[colunas_identificacao](df)
168
168
 
169
+ def converte_anos(anos: List[str]) -> List[int]:
170
+ """
171
+ Converte uma lista de anos representados como strings para inteiros.
172
+ Se o ano for 'PRE', converte para 1; se for 'POS', converte para 9999.
173
+ """
174
+ anos_convertidos = []
175
+ for a in anos:
176
+ if a == "PRE":
177
+ anos_convertidos.append(1)
178
+ elif a == "POS":
179
+ anos_convertidos.append(9999)
180
+ else:
181
+ anos_convertidos.append(int(a))
182
+ return anos_convertidos
183
+
184
+ def prepara_vetor_ano_mes_tabela(anos: List[str], meses: List[int]) -> List[datetime]:
185
+
186
+ anos_convertidos = converte_anos(anos)
187
+ return [
188
+ datetime(year=int(a), month=int(m), day=1) for a, m in zip(anos_convertidos, meses)
189
+ ]
190
+
169
191
 
170
192
  def prepara_vetor_anos_tabela(anos: List[str]) -> List[datetime]:
171
193
  # Se tem pré, substitui por 0001
172
194
  # Se tem pós, substitui por 9999
173
195
  # Repete os valores existentes 12 vezes
174
- anos_convertidos: List[int] = []
175
- for a in anos:
176
- if a == "PRE":
177
- a_convertido = 1
178
- elif a == "POS":
179
- a_convertido = 9999
180
- else:
181
- a_convertido = int(a)
182
- anos_convertidos.append(a_convertido)
196
+ anos_convertidos = converte_anos(anos)
183
197
 
184
198
  anos_array = np.array(anos_convertidos).repeat(len(MESES_DF))
185
199
  meses = np.tile(np.arange(1, 13), len(anos))
@@ -2,10 +2,14 @@ from cfinterface.components.section import Section
2
2
  from cfinterface.components.line import Line
3
3
  from cfinterface.components.integerfield import IntegerField
4
4
  from cfinterface.components.floatfield import FloatField
5
- from cfinterface.components.datetimefield import DatetimeField
5
+ from cfinterface.components.literalfield import LiteralField
6
6
  from typing import List, IO, Optional
7
7
  import pandas as pd # type: ignore
8
- from datetime import datetime
8
+
9
+ from inewave._utils.formatacao import (
10
+ prepara_valor_ano,
11
+ prepara_vetor_ano_mes_tabela,
12
+ )
9
13
 
10
14
 
11
15
  class BlocoUHEGhmin(Section):
@@ -22,7 +26,8 @@ class BlocoUHEGhmin(Section):
22
26
  self.__linha_uhe = Line(
23
27
  [
24
28
  IntegerField(3, 0),
25
- DatetimeField(7, 5, format="%m %Y"),
29
+ LiteralField(2, 5),
30
+ LiteralField(4, 8),
26
31
  IntegerField(1, 14),
27
32
  FloatField(6, 17, 0),
28
33
  ]
@@ -48,7 +53,7 @@ class BlocoUHEGhmin(Section):
48
53
  def converte_tabela_em_df():
49
54
  df = pd.DataFrame()
50
55
  df["codigo_usina"] = codigos
51
- df["data"] = datas
56
+ df["data"] = prepara_vetor_ano_mes_tabela(anos, meses)
52
57
  df["patamar"] = patamares
53
58
  df["geracao"] = geracoes
54
59
  return df
@@ -59,7 +64,8 @@ class BlocoUHEGhmin(Section):
59
64
 
60
65
  # Variáveis auxiliares
61
66
  codigos: List[Optional[int]] = []
62
- datas: List[Optional[datetime]] = []
67
+ meses: List[Optional[str]] = []
68
+ anos: List[Optional[str]] = []
63
69
  patamares: List[Optional[int]] = []
64
70
  geracoes: List[Optional[float]] = []
65
71
 
@@ -72,9 +78,10 @@ class BlocoUHEGhmin(Section):
72
78
  break
73
79
  dados = self.__linha_uhe.read(linha)
74
80
  codigos.append(dados[0])
75
- datas.append(dados[1])
76
- patamares.append(dados[2])
77
- geracoes.append(dados[3])
81
+ meses.append(dados[1])
82
+ anos.append(dados[2])
83
+ patamares.append(dados[3])
84
+ geracoes.append(dados[4])
78
85
 
79
86
  # Override
80
87
  def write(self, file: IO, *args, **kwargs):
@@ -82,8 +89,12 @@ class BlocoUHEGhmin(Section):
82
89
  file.write(linha)
83
90
  if not isinstance(self.data, pd.DataFrame):
84
91
  raise ValueError("Dados do ghmin.dat não foram lidos com sucesso")
92
+ df_aux = self.data.copy()
93
+ df_aux['ano'] = df_aux['data'].apply(lambda x: prepara_valor_ano(x.year))
94
+ df_aux['mes'] = df_aux['data'].apply(lambda x: f"{x.month:2d}")
95
+ df_aux.drop("data", inplace=True, axis=1)
85
96
 
86
- for _, linha in self.data.iterrows():
97
+ for _, linha in df_aux[['codigo_usina','mes','ano','patamar','geracao']].iterrows():
87
98
  linha_lida: pd.Series = linha
88
99
  dados_linha = linha_lida.tolist()
89
100
  file.write(self.__linha_uhe.write(dados_linha))
@@ -51,8 +51,10 @@ class BlocoTemposEtapasTim(Block):
51
51
  tempos: List[timedelta] = []
52
52
 
53
53
  # Leitura das etapas
54
- for _ in range(5):
54
+ while True:
55
55
  dados = self.__line.read(file.readline())
56
+ if not dados or not dados[0].strip("- \t\n"):
57
+ break
56
58
  etapas.append(dados[0].split(":")[0])
57
59
  h = int(dados[1].split("h")[0])
58
60
  min = int(dados[1].split("h")[1].split("min")[0])
@@ -285,7 +285,7 @@ class BlocoIntercambioSubsistema(Section):
285
285
  self.data = converte_tabela_em_df()
286
286
  break
287
287
  # Confere se é uma linha de subsistema ou tabela
288
- if len(linha) < 30:
288
+ if len(linha.strip()) < 30:
289
289
  dados = self.__linha_subsis.read(linha)
290
290
  subsis_de_atual = (
291
291
  subsis_de_atual if dados[0] is None else dados[0]
@@ -575,7 +575,7 @@ class BlocoGeracaoUsinasNaoSimuladas(Section):
575
575
  self.data = converte_tabela_em_df()
576
576
  break
577
577
  # Confere se é uma linha de subsistema ou tabela
578
- if len(linha) < 30:
578
+ if len(linha.strip()) < 30:
579
579
  dados = self.__linha_subsis.read(linha)
580
580
  subsis_atual = dados[0]
581
581
  bloco_atual = dados[1]
@@ -44,8 +44,7 @@ class TabelaMediasusih(Section):
44
44
  var_name="estagio",
45
45
  value_name="valor",
46
46
  )
47
- df.loc[df["valor"] == "- ", "valor"] = 0.0
48
- df = df.astype({"valor": float})
47
+ df["valor"] = pd.to_numeric(df["valor"], errors="coerce")
49
48
  df["estagio"] = df["estagio"].astype(int)
50
49
  df["estagio"] -= df["estagio"].min() - 1
51
50
  df = df.pivot_table(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: inewave
3
- Version: 1.10.2
3
+ Version: 1.10.4
4
4
  Summary: inewave
5
5
  Project-URL: Documentation, https://rjmalves.github.io/inewave/
6
6
  Project-URL: Repository, https://github.com/rjmalves/inewave/
@@ -1,8 +1,8 @@
1
- inewave/__init__.py,sha256=fvATv_T-Ej_ViYCGhjQzMmlVjKBnjgC2joGAze6aajc,236
1
+ inewave/__init__.py,sha256=4vDxRppIcVG0MZ_cacv6ciAvU2OoLZDCLVF5gPVlI6c,236
2
2
  inewave/config.py,sha256=fMgG2sqE_PNz30QCNxkgfPf78SEOAVfV07kGtO1bREE,1106
3
3
  inewave/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  inewave/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- inewave/_utils/formatacao.py,sha256=-bdNExSg2PGAq7fwMekoPbeLvGYiEjpCR_nlKAGF9xg,5930
5
+ inewave/_utils/formatacao.py,sha256=v7Qo6wb_q43IsLn6YHIKup_-0Q-TSEIvwHsMFWvkFI8,6431
6
6
  inewave/libs/__init__.py,sha256=Jz0qQ08srjYGvoynfro6m8fQYAKbnkj-VweNEu8JnVQ,161
7
7
  inewave/libs/eolica.py,sha256=YMO1_37PojeUeix-CtkYeba2z66aRkaRR6CE_Cn4sbs,13324
8
8
  inewave/libs/restricoes.py,sha256=9CkYGsg6fWSFS7RoyIqKlqxfaCwcNxFJrUS8Qknz4xg,16485
@@ -122,13 +122,13 @@ inewave/newave/modelos/expt.py,sha256=TgfHkVhZUbBcvRgctjxHgRHqcm_57BecXY5wKb1ZrX
122
122
  inewave/newave/modelos/forward.py,sha256=f3YDCMcl45DOYVa41XtI3A9Ko9pPmeI-_epu5ov3m4o,88425
123
123
  inewave/newave/modelos/forwarh.py,sha256=46jHcPDTBftWm8Q23zzJwiXIoSnxAuQLMBzkA4BQq6s,8231
124
124
  inewave/newave/modelos/gee.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
- inewave/newave/modelos/ghmin.py,sha256=53Bno60jYq2BttvuRNMJ0ccOqA3dzPKUsrLAz9gPg-o,2962
125
+ inewave/newave/modelos/ghmin.py,sha256=RKkZBTGjh8ovcxVhYnvVXvcxYFsqNHIO4C8YOpCyJPI,3438
126
126
  inewave/newave/modelos/gtminpat.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
127
  inewave/newave/modelos/hidr.py,sha256=ga3luPn4E7GDY5dl9UrnbIt2DUU1m1cs4EognfLsg2c,15773
128
128
  inewave/newave/modelos/itaipu.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
129
129
  inewave/newave/modelos/manutt.py,sha256=16sztv-hOdVUUeL2J5F9vBagZnII9-F-IGQJpiAkTK4,3781
130
130
  inewave/newave/modelos/modif.py,sha256=uXNRcO03dwqCeoJ1kBSNWAiaYJLLqIDThAeqsym20Uo,17159
131
- inewave/newave/modelos/newavetim.py,sha256=irKwGBH-3V1A5wKWI4NCjx_yQ0j4iCg1WAjEl-vqVj0,2979
131
+ inewave/newave/modelos/newavetim.py,sha256=5oCqu2rL0A3sok2k8NoqaHhhEPFWz1_DXWYxoG9VFe0,3052
132
132
  inewave/newave/modelos/nwv_avl_evap.py,sha256=22oXfDH9R-I1HwAiaQgm7x21zDWGWVySWYsLfdvGlHg,1228
133
133
  inewave/newave/modelos/nwv_cortes_evap.py,sha256=nAgdZ-TdWPmokcG1qANgoKtfwyq3waIFclKcY7WyWtQ,1292
134
134
  inewave/newave/modelos/nwv_eco_evap.py,sha256=vog9Lw4cqxx66Gmqext086cEsL-Tz5_4pG6wJFSoO90,1235
@@ -144,7 +144,7 @@ inewave/newave/modelos/ree.py,sha256=6VaJhSKutVlaPtQDTZcf1S7JHR0hNhEsPgsh_MzyegA
144
144
  inewave/newave/modelos/sar.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
145
145
  inewave/newave/modelos/selcor.py,sha256=v2ASlI61CKebh5eCOeA5Ce3GLzFDAYJ9Bsm0whKqq-4,2069
146
146
  inewave/newave/modelos/shist.py,sha256=wy_E1onlbfrCFvWcpNhnUt3WAGmPJ2FSUbkywvH1b2c,3376
147
- inewave/newave/modelos/sistema.py,sha256=T6FYm05CkNzhwzjx_8O5cJwGvAoSRmHJYf41neDs7Eg,23091
147
+ inewave/newave/modelos/sistema.py,sha256=5DCUta3ef69SHD6AdwVFW3bYU-i7doVNQl1v5XEUyUk,23107
148
148
  inewave/newave/modelos/tecno.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
149
149
  inewave/newave/modelos/term.py,sha256=cL5356rYRHPf1zsXzoGzrPa1MtncMAOhwP-U27s2o8E,4760
150
150
  inewave/newave/modelos/vazaob.py,sha256=_G5Kd1PD7C5DU2aV_Xam67GpaqJTEvXCWuhiAO_POyw,2901
@@ -444,7 +444,7 @@ inewave/nwlistop/modelos/mediasrhq.py,sha256=hv9jZHw8wL3p-YL1fY-oym2EO5N4ooPbADD
444
444
  inewave/nwlistop/modelos/mediasrhv.py,sha256=38fFijM3Fdr_3GRaq5bESFsFCbgJCuq22EBxz-Htaz4,1736
445
445
  inewave/nwlistop/modelos/mediassin.py,sha256=R798woqZQ4p93Jpmt1ji2vNms1UEhkAkAFqv2b-lwUE,1635
446
446
  inewave/nwlistop/modelos/mediasusie.py,sha256=_j5osR1diNnwkqxy1wHcnTVW_T0YDHa4YAS8KwBvivw,1725
447
- inewave/nwlistop/modelos/mediasusih.py,sha256=ZO5GbJytNcDBBOuiEEMHor7666VTqU6jh_6TJAAffRQ,1819
447
+ inewave/nwlistop/modelos/mediasusih.py,sha256=K8dwMu8VVRUtgc_UDcEFavQHynPqhV1DgdEp8lyDBPM,1791
448
448
  inewave/nwlistop/modelos/mediasusit.py,sha256=87xjpsy7XS8O40hpDubbsPn-MXKRn2NVXG5k3iYJrzA,1725
449
449
  inewave/nwlistop/modelos/mercl.py,sha256=arrMiDrPb3z7CqoT0ndCW0GZgJec6oa0by3yfd9GWWQ,634
450
450
  inewave/nwlistop/modelos/merclsin.py,sha256=arrMiDrPb3z7CqoT0ndCW0GZgJec6oa0by3yfd9GWWQ,634
@@ -539,7 +539,7 @@ inewave/nwlistop/modelos/blocos/usina.py,sha256=cQvLVtG1NC8y4lP_to6-YjAKQRGRlaxO
539
539
  inewave/nwlistop/modelos/blocos/valoresclassetermicaseriepatamar.py,sha256=0LV0JMFoiuNEQ3n-XVfG2T0sIq_33bnCt6gmwPOTql8,3283
540
540
  inewave/nwlistop/modelos/blocos/valoresserie.py,sha256=Q88QBoI3zyU7y0AvHBeSqDBEVAkb3rAa3XpxA51NbF8,2143
541
541
  inewave/nwlistop/modelos/blocos/valoresseriepatamar.py,sha256=xnRdor-_2VyR5EbWNSzU_hbABJFtfgKGlznbcRaslGg,2589
542
- inewave-1.10.2.dist-info/METADATA,sha256=vAZzf_juRHFDT3Dyo4OGAjxz3oP-KQdK9tj8QUULvcI,3743
543
- inewave-1.10.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
544
- inewave-1.10.2.dist-info/licenses/LICENSE.md,sha256=0jOBL78mjzscN0-XI-6YtK1IqnODUbG85DaKAMH4XJ8,1070
545
- inewave-1.10.2.dist-info/RECORD,,
542
+ inewave-1.10.4.dist-info/METADATA,sha256=hK208dE9CHEbTHkX7bZdlCAuIKFR527ceI7UlhF0hjg,3743
543
+ inewave-1.10.4.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
544
+ inewave-1.10.4.dist-info/licenses/LICENSE.md,sha256=0jOBL78mjzscN0-XI-6YtK1IqnODUbG85DaKAMH4XJ8,1070
545
+ inewave-1.10.4.dist-info/RECORD,,