inewave 1.10.4__py3-none-any.whl → 1.11.0__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.4"
9
+ __version__ = "1.11.0"
10
10
 
11
11
  from . import newave # noqa
12
12
  from . import nwlistcf # noqa
@@ -20,15 +20,20 @@ from .clasgas import Clasgas # noqa
20
20
  from .clast import Clast # noqa
21
21
  from .confhd import Confhd # noqa
22
22
  from .conft import Conft # noqa
23
+ from .cortes import Cortes # noqa
24
+ from .cortesh import Cortesh # noqa
23
25
  from .curva import Curva # noqa
24
26
  from .cvar import Cvar # noqa
25
27
  from .dger import Dger # noqa
26
28
  from .dsvagua import Dsvagua # noqa
27
29
  from .eafpast import Eafpast # noqa
30
+ from .eliminacao_cortes import EliminacaoCortes # noqa
28
31
  from .elnino import ElNino # noqa
29
32
  from .ensoaux import ENSOAux # noqa
30
33
  from .exph import Exph # noqa
31
34
  from .expt import Expt # noqa
35
+ from .forward import Forward # noqa
36
+ from .forwarh import Forwarh # noqa
32
37
  from .gee import GEE # noqa
33
38
  from .ghmin import Ghmin # noqa
34
39
  from .gtminpat import Gtminpat # noqa
@@ -554,3 +554,25 @@ class Arquivos(SectionFile):
554
554
  @cortesh_pos_estudo.setter
555
555
  def cortesh_pos_estudo(self, arq: str):
556
556
  self.__atualiza_nome_por_indice(43, arq)
557
+
558
+ @property
559
+ def volume_referencia_sazonal(self) -> Optional[str]:
560
+ """
561
+ Nome do arquivo com os volumes de referência sazonais.
562
+ """
563
+ return self.__le_nome_por_indice(44)
564
+
565
+ @volume_referencia_sazonal.setter
566
+ def volume_referencia_sazonal(self, arq: str):
567
+ self.__atualiza_nome_por_indice(44, arq)
568
+
569
+ @property
570
+ def eliminacao_cortes(self) -> Optional[str]:
571
+ """
572
+ Nome do arquivo com parâmetros para eliminação de cortes.
573
+ """
574
+ return self.__le_nome_por_indice(45)
575
+
576
+ @eliminacao_cortes.setter
577
+ def eliminacao_cortes(self, arq: str):
578
+ self.__atualiza_nome_por_indice(45, arq)
@@ -0,0 +1,188 @@
1
+ from inewave.newave.modelos.eliminacao_cortes import BlocoParametrosEliminacaoCortes
2
+
3
+ from cfinterface.files.sectionfile import SectionFile
4
+ from typing import TypeVar, Optional, List
5
+
6
+
7
+ class EliminacaoCortes(SectionFile):
8
+ """
9
+ Armazena os dados de entrada do NEWAVE referentes aos parâmetros
10
+ utilizados na eliminação de cortes de Benders.
11
+
12
+ Esta classe lida com informações de entrada do NEWAVE que definem
13
+ como o algoritmo de eliminação de cortes deve ser executado,
14
+ incluindo configurações para diferentes algoritmos (Paralelo,
15
+ Análise por Pares, Shapiro Modificado).
16
+
17
+ """
18
+
19
+ T = TypeVar("T")
20
+
21
+ SECTIONS = [BlocoParametrosEliminacaoCortes]
22
+
23
+ @property
24
+ def _parametros(self) -> Optional[List[List]]:
25
+ b = self.data.get_sections_of_type(BlocoParametrosEliminacaoCortes)
26
+ if isinstance(b, BlocoParametrosEliminacaoCortes) and isinstance(b.data, list) and len(b.data) > 0:
27
+ return b.data
28
+ return None
29
+
30
+ def _get_parametro_por_indice(self, indice: int, coluna: int) -> Optional[int]:
31
+ params = self._parametros
32
+ if params and len(params) > indice and len(params[indice]) > coluna:
33
+ return params[indice][coluna]
34
+ return None
35
+
36
+ @property
37
+ def algoritmo_avaliacao_paralelo(self) -> Optional[int]:
38
+ """
39
+ Habilita ou não o algoritmo para eliminação de cortes Paralelo.
40
+
41
+ :return: O valor do parâmetro
42
+ :rtype: int | None
43
+ """
44
+ valor = self._get_parametro_por_indice(0, 0)
45
+ return int(valor) if valor is not None else None
46
+
47
+ @property
48
+ def algoritmo_avaliacao_pares(self) -> Optional[int]:
49
+ """
50
+ Habilita ou não o algoritmo para eliminação de cortes por Análise por Pares.
51
+
52
+ :return: O valor do parâmetro
53
+ :rtype: int | None
54
+ """
55
+ valor = self._get_parametro_por_indice(0, 1)
56
+ return int(valor) if valor is not None else None
57
+
58
+ @property
59
+ def algoritmo_avaliacao_shapiro(self) -> Optional[int]:
60
+ """
61
+ Habilita ou não o algoritmo para eliminação de cortes Shapiro Modificado.
62
+
63
+ :return: O valor do parâmetro
64
+ :rtype: int | None
65
+ """
66
+ valor = self._get_parametro_por_indice(0, 2)
67
+ return int(valor) if valor is not None else None
68
+
69
+ @property
70
+ def iteracao_inicial_paralelo(self) -> Optional[int]:
71
+ """
72
+ Iteração inicial para aplicação da eliminação de cortes (Paralelo).
73
+
74
+ :return: O valor do parâmetro
75
+ :rtype: int | None
76
+ """
77
+ valor = self._get_parametro_por_indice(1, 0)
78
+ return int(valor) if valor is not None else None
79
+
80
+ @property
81
+ def iteracao_inicial_pares(self) -> Optional[int]:
82
+ """
83
+ Iteração inicial para aplicação da eliminação de cortes (Análise por Pares).
84
+
85
+ :return: O valor do parâmetro
86
+ :rtype: int | None
87
+ """
88
+ valor = self._get_parametro_por_indice(1, 1)
89
+ return int(valor) if valor is not None else None
90
+
91
+ @property
92
+ def iteracao_inicial_shapiro(self) -> Optional[int]:
93
+ """
94
+ Iteração inicial para aplicação da eliminação de cortes (Shapiro Modificado).
95
+
96
+ :return: O valor do parâmetro
97
+ :rtype: int | None
98
+ """
99
+ valor = self._get_parametro_por_indice(1, 2)
100
+ return int(valor) if valor is not None else None
101
+
102
+ @property
103
+ def passo_aplicacao_paralelo(self) -> Optional[int]:
104
+ """
105
+ Passo para aplicação da eliminação de cortes (Paralelo).
106
+
107
+ :return: O valor do parâmetro
108
+ :rtype: int | None
109
+ """
110
+ valor = self._get_parametro_por_indice(2, 0)
111
+ return int(valor) if valor is not None else None
112
+
113
+ @property
114
+ def passo_aplicacao_pares(self) -> Optional[int]:
115
+ """
116
+ Passo para aplicação da eliminação de cortes (Análise por Pares).
117
+
118
+ :return: O valor do parâmetro
119
+ :rtype: int | None
120
+ """
121
+ valor = self._get_parametro_por_indice(2, 1)
122
+ return int(valor) if valor is not None else None
123
+
124
+ @property
125
+ def passo_aplicacao_shapiro(self) -> Optional[int]:
126
+ """
127
+ Passo para aplicação da eliminação de cortes (Shapiro Modificado).
128
+
129
+ :return: O valor do parâmetro
130
+ :rtype: int | None
131
+ """
132
+ valor = self._get_parametro_por_indice(2, 2)
133
+ return int(valor) if valor is not None else None
134
+
135
+ @property
136
+ def janela_iteracoes_pares(self) -> Optional[int]:
137
+ """
138
+ Janela de iterações de construção dos cortes a serem avaliados (Análise por Pares).
139
+
140
+ :return: O valor do parâmetro
141
+ :rtype: int | None
142
+ """
143
+ valor = self._get_parametro_por_indice(3, 1)
144
+ return int(valor) if valor is not None else None
145
+
146
+ @property
147
+ def janela_iteracoes_shapiro(self) -> Optional[int]:
148
+ """
149
+ Janela de iterações de construção dos cortes a serem avaliados (Shapiro Modificado).
150
+
151
+ :return: O valor do parâmetro
152
+ :rtype: int | None
153
+ """
154
+ valor = self._get_parametro_por_indice(3, 2)
155
+ return int(valor) if valor is not None else None
156
+
157
+ @property
158
+ def fator_limites_afluencias(self) -> Optional[float]:
159
+ """
160
+ Fator aplicado aos limites das afluências passadas (%).
161
+
162
+ :return: O valor do parâmetro
163
+ :rtype: float | None
164
+ """
165
+ valor = self._get_parametro_por_indice(4, 0)
166
+ return float(valor) if valor is not None else None
167
+
168
+ @property
169
+ def afluencias_sim_final_calculo_limites(self) -> Optional[int]:
170
+ """
171
+ Afluências da simulação final no cálculo dos limites.
172
+
173
+ :return: O valor do parâmetro
174
+ :rtype: int | None
175
+ """
176
+ valor = self._get_parametro_por_indice(5, 0)
177
+ return int(valor) if valor is not None else None
178
+
179
+ @property
180
+ def impressao_relatorios(self) -> Optional[int]:
181
+ """
182
+ Impressão de relatórios da eliminação de cortes.
183
+
184
+ :return: O valor do parâmetro (0=NÃO, 1=SIM)
185
+ :rtype: int | None
186
+ """
187
+ valor = self._get_parametro_por_indice(6, 0)
188
+ return int(valor) if valor is not None else None
@@ -0,0 +1,79 @@
1
+ from cfinterface.components.section import Section
2
+ from cfinterface.components.line import Line
3
+ from cfinterface.components.literalfield import LiteralField
4
+ from cfinterface.components.integerfield import IntegerField
5
+ from cfinterface.components.floatfield import FloatField
6
+ from typing import IO, List
7
+
8
+
9
+ class BlocoParametrosEliminacaoCortes(Section):
10
+ """
11
+ Bloco com os parâmetros para eliminação de cortes de Benders
12
+ utilizados pelo NEWAVE, extraído do arquivo `eliminacao_cortes.dat`.
13
+ """
14
+
15
+ __slots__ = ["__linha", "__cabecalhos", "__comentarios", "data"]
16
+
17
+ def __init__(self, previous=None, next=None, data=None) -> None:
18
+ super().__init__(previous, next, data)
19
+ self.__linha = Line(
20
+ [
21
+ LiteralField(60, 0), # Descrição do parâmetro
22
+ FloatField(6, 61, 2), # Valor PARAL (coluna 1)
23
+ IntegerField(6, 68), # Valor A.P.P (coluna 2)
24
+ IntegerField(6, 75), # Valor S.M. (coluna 3)
25
+ ]
26
+ )
27
+ self.__cabecalhos: List[str] = []
28
+ self.__comentarios: List[str] = []
29
+
30
+ def __eq__(self, o: object) -> bool:
31
+ if not isinstance(o, BlocoParametrosEliminacaoCortes):
32
+ return False
33
+ bloco: BlocoParametrosEliminacaoCortes = o
34
+ if not all(
35
+ [
36
+ isinstance(self.data, list),
37
+ isinstance(o.data, list),
38
+ ]
39
+ ):
40
+ return False
41
+ else:
42
+ return self.data == bloco.data
43
+
44
+ # Override
45
+ def read(self, file: IO, *args, **kwargs):
46
+ # Salta as linhas de cabeçalhos
47
+ for _ in range(2):
48
+ self.__cabecalhos.append(file.readline())
49
+
50
+ # Lê as linhas de parâmetros
51
+ self.data: List[List] = []
52
+
53
+ for _ in range(4):
54
+ linha = file.readline()
55
+ if not linha:
56
+ break
57
+ dados = self.__linha.read(linha)
58
+
59
+ self.__comentarios.append(dados[0].strip())
60
+ self.data.append(dados[1:])
61
+
62
+ for _ in range(3):
63
+ linha = file.readline()
64
+ if not linha:
65
+ break
66
+ dados = self.__linha.read(linha)
67
+
68
+ self.__comentarios.append(dados[0].strip())
69
+ self.data.append([dados[1]])
70
+
71
+ # Override
72
+ def write(self, file: IO, *args, **kwargs):
73
+ for linha in self.__cabecalhos:
74
+ file.write(linha)
75
+ if not isinstance(self.data, list):
76
+ raise ValueError("Dados do eliminacao_cortes.dat não foram lidos com sucesso")
77
+
78
+ for c, s in zip(self.__comentarios, self.data):
79
+ file.write(self.__linha.write([c] + s))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: inewave
3
- Version: 1.10.4
3
+ Version: 1.11.0
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,4 +1,4 @@
1
- inewave/__init__.py,sha256=4vDxRppIcVG0MZ_cacv6ciAvU2OoLZDCLVF5gPVlI6c,236
1
+ inewave/__init__.py,sha256=44kSITb1meBcZFYLpGkP_bStt_w3rOvo1hY3JrvaynI,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
@@ -11,11 +11,11 @@ inewave/libs/modelos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
11
11
  inewave/libs/modelos/eolica.py,sha256=0bKVjGBYBJ5RuddyE72kbFjOxlrGvNC7Yj6Et9PHpjk,14151
12
12
  inewave/libs/modelos/restricoes.py,sha256=-9wye8gEj83efSrxqibNRuGpMWgb1T5ukmmr-0rI0Qg,19606
13
13
  inewave/libs/modelos/usinas_hidreletricas.py,sha256=4-fWBqlWj2GKKj5qm8zd0NbZb7sRZq-yHLVzQ99UZKU,19927
14
- inewave/newave/__init__.py,sha256=9b_fJulbMzAlfsUh2w_19e6AS2OSA_Vj3M5GJtcj31s,2618
14
+ inewave/newave/__init__.py,sha256=JQ167G-38iOiYK-sXBC4KBfySRGuvWVch9HRHjuN7_Q,2820
15
15
  inewave/newave/abertura.py,sha256=LdSW9PrMDEG6LXgsRj4awui7R0bQqZLcHiXrfzpwiZs,361
16
16
  inewave/newave/adterm.py,sha256=83DR82nT0uqbMwWJ-hwQmmWb6l02iXQhKNabuod8y-g,1097
17
17
  inewave/newave/agrint.py,sha256=DmZ3ZBTVnaIUBkjrIC5h9ELMbECxJwF3G3Fr_xq7aWQ,2064
18
- inewave/newave/arquivos.py,sha256=faGtzKORL8MJw_p9QcAdqQVU6ZLhViLYsth_9VVSmS0,15168
18
+ inewave/newave/arquivos.py,sha256=Aqw3p4LwV_Q4P7LllwR-GB8XSNHfsfU_PMmPzHaAeng,15839
19
19
  inewave/newave/avl_cortesfpha_nwv.py,sha256=utS3pfQmsclt4PAunmgERtbPUpr-YUo3ycToT_sE44I,1605
20
20
  inewave/newave/avl_desvfpha_s.py,sha256=PUrb6F6WIMyrPXH6_Irxk4_m9HXZ-gNiDSbGSBFyraE,1989
21
21
  inewave/newave/avl_desvfpha_v_q.py,sha256=tMeYRLB9JG9Y-3QlgBwuGK0-ReR9Y0JlPyZBVLxu5LI,2015
@@ -34,6 +34,7 @@ inewave/newave/dger.py,sha256=e7AGNjBm7kZqY5fRcthvYFY_m7vovWbZdAQF-Iyd_Wk,83959
34
34
  inewave/newave/dsvagua.py,sha256=e4Kczvaj4kHkxBvBTiKFI69aCHY7MMrO2bCSTjtBJwI,1294
35
35
  inewave/newave/eafpast.py,sha256=uSKf6mWAERHED--eRGYcJTuEcYg-SGzolo5hCFlzLVg,1203
36
36
  inewave/newave/eco_fpha.py,sha256=-HCqfX-zLIBPPPGftLNffyDWBL91sEhA2vJjp5jhuWM,1491
37
+ inewave/newave/eliminacao_cortes.py,sha256=eAIg8ZKIz4KZk3lVJApY2mafAtjZLUFRQzMZnx7Fy7c,6229
37
38
  inewave/newave/elnino.py,sha256=Q8jFu1ZUIhJK7AWrNQ16jniYrcinptFUEQDXpurBSvA,333
38
39
  inewave/newave/enavazb.py,sha256=LuuzYdFun-Ilqff39HtT1H-lIycZ4YuvomQZ7MJnKCY,1443
39
40
  inewave/newave/enavazf.py,sha256=32dyiVQGfpH6oa6pfra0uir3yO19L0zDlQYOgduTx6o,1368
@@ -109,6 +110,7 @@ inewave/newave/modelos/dger.py,sha256=-aUJ-S0j15q1RVbAyq-bWB0F9YfXGoNe1Vsy7hH78E
109
110
  inewave/newave/modelos/dsvagua.py,sha256=G_4PKZcQCF_vZMrBqQcnpH54edXhSEyDlHNy4aZoiIk,5592
110
111
  inewave/newave/modelos/eafpast.py,sha256=HFKpsMyoLGwQly95uHhsK2wnrBwL7v8auzaa-UbgP5k,3322
111
112
  inewave/newave/modelos/eco_fpha.py,sha256=q-b-ShvAW-RDpr7xlmhBvM9ixWF9DxqFvhxApA7oGdo,1646
113
+ inewave/newave/modelos/eliminacao_cortes.py,sha256=VXBP4rukg9sIU3aMiAeZ8R6keJbCIMWKIemcM6Cwv6A,2690
112
114
  inewave/newave/modelos/elnino.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
113
115
  inewave/newave/modelos/enavazb.py,sha256=DfLuRFI9gcSSeZUn-xwYsaWCe618iMw7LUFo9RVI1l0,2966
114
116
  inewave/newave/modelos/enavazf.py,sha256=AgfALMrCmNcnUJzbyDDvpr2i-X3ex6vLHsvdVUemnls,2738
@@ -539,7 +541,7 @@ inewave/nwlistop/modelos/blocos/usina.py,sha256=cQvLVtG1NC8y4lP_to6-YjAKQRGRlaxO
539
541
  inewave/nwlistop/modelos/blocos/valoresclassetermicaseriepatamar.py,sha256=0LV0JMFoiuNEQ3n-XVfG2T0sIq_33bnCt6gmwPOTql8,3283
540
542
  inewave/nwlistop/modelos/blocos/valoresserie.py,sha256=Q88QBoI3zyU7y0AvHBeSqDBEVAkb3rAa3XpxA51NbF8,2143
541
543
  inewave/nwlistop/modelos/blocos/valoresseriepatamar.py,sha256=xnRdor-_2VyR5EbWNSzU_hbABJFtfgKGlznbcRaslGg,2589
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,,
544
+ inewave-1.11.0.dist-info/METADATA,sha256=q80VZ89iXc624xH1xYFINnkW37LuIDp_2Q3sVRHfGzo,3743
545
+ inewave-1.11.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
546
+ inewave-1.11.0.dist-info/licenses/LICENSE.md,sha256=0jOBL78mjzscN0-XI-6YtK1IqnODUbG85DaKAMH4XJ8,1070
547
+ inewave-1.11.0.dist-info/RECORD,,