inewave 1.10.3__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.3"
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])
@@ -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.3
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=dVljpD7h1gRAVUNk04SzzzNVmaCOpjrq3lPunv7_g1w,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
@@ -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.3.dist-info/METADATA,sha256=8WCCVwL-O2ZuPKHaMCD7mxLyQm3XVr300lH_CzNbxpg,3743
543
- inewave-1.10.3.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
544
- inewave-1.10.3.dist-info/licenses/LICENSE.md,sha256=0jOBL78mjzscN0-XI-6YtK1IqnODUbG85DaKAMH4XJ8,1070
545
- inewave-1.10.3.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,,