inewave 1.6.0__py3-none-any.whl → 1.7.1__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.
Files changed (44) hide show
  1. inewave/__init__.py +1 -1
  2. inewave/newave/__init__.py +10 -0
  3. inewave/newave/modelos/pmo.py +243 -3
  4. inewave/newave/modelos/vazinat.py +92 -0
  5. inewave/newave/pmo.py +82 -1
  6. inewave/newave/sistema.py +2 -2
  7. inewave/newave/vazinat.py +43 -0
  8. inewave/nwlistop/__init__.py +8 -1
  9. inewave/nwlistop/mediasmerc.py +20 -21
  10. inewave/nwlistop/mediasree.py +37 -0
  11. inewave/nwlistop/mediasrep.py +38 -0
  12. inewave/nwlistop/mediasrhq.py +38 -0
  13. inewave/nwlistop/mediasrhv.py +38 -0
  14. inewave/nwlistop/mediassin.py +19 -21
  15. inewave/nwlistop/mediasusie.py +38 -0
  16. inewave/nwlistop/mediasusih.py +37 -0
  17. inewave/nwlistop/mediasusit.py +37 -0
  18. inewave/nwlistop/modelos/mediasmerc.py +46 -34
  19. inewave/nwlistop/modelos/mediasree.py +52 -0
  20. inewave/nwlistop/modelos/mediasrep.py +52 -0
  21. inewave/nwlistop/modelos/mediasrhq.py +52 -0
  22. inewave/nwlistop/modelos/mediasrhv.py +52 -0
  23. inewave/nwlistop/modelos/mediassin.py +45 -29
  24. inewave/nwlistop/modelos/mediasusie.py +52 -0
  25. inewave/nwlistop/modelos/mediasusih.py +54 -0
  26. inewave/nwlistop/modelos/mediasusit.py +52 -0
  27. {inewave-1.6.0.dist-info → inewave-1.7.1.dist-info}/METADATA +1 -1
  28. {inewave-1.6.0.dist-info → inewave-1.7.1.dist-info}/RECORD +43 -20
  29. tests/mocks/arquivos/pmo.py +1741 -149
  30. tests/newave/test_pmo.py +59 -0
  31. tests/newave/test_vazinat.py +66 -0
  32. tests/nwlistop/test_mediasmerc.py +4 -8
  33. tests/nwlistop/test_mediasree.py +12 -0
  34. tests/nwlistop/test_mediasrep.py +12 -0
  35. tests/nwlistop/test_mediasrhq.py +12 -0
  36. tests/nwlistop/test_mediasrhv.py +11 -0
  37. tests/nwlistop/test_mediassin.py +4 -9
  38. tests/nwlistop/test_mediasusie.py +12 -0
  39. tests/nwlistop/test_mediasusih.py +11 -0
  40. tests/nwlistop/test_mediasusit.py +12 -0
  41. inewave/_utils/leituracsv.py +0 -57
  42. {inewave-1.6.0.dist-info → inewave-1.7.1.dist-info}/LICENSE.md +0 -0
  43. {inewave-1.6.0.dist-info → inewave-1.7.1.dist-info}/WHEEL +0 -0
  44. {inewave-1.6.0.dist-info → inewave-1.7.1.dist-info}/top_level.txt +0 -0
tests/newave/test_pmo.py CHANGED
@@ -8,6 +8,7 @@ from inewave.newave.modelos.pmo import (
8
8
  BlocoCustoOperacaoPMO,
9
9
  BlocoCustoOperacaoTotalPMO,
10
10
  BlocoProdutibilidadesConfiguracaoPMO,
11
+ BlocoEnergiaArmazenadaMaximaPMO,
11
12
  BlocoEnergiaArmazenadaInicialPMO,
12
13
  BlocoVolumeArmazenadoInicialPMO,
13
14
  BlocoPenalidadeViolacaoOutrosUsosPMO,
@@ -17,6 +18,8 @@ from inewave.newave.modelos.pmo import (
17
18
  BlocoPenalidadeViolacaoEvaporacaoPMO,
18
19
  BlocoPenalidadeViolacaoTurbinamentoMaximoPMO,
19
20
  BlocoPenalidadeViolacaoTurbinamentoMinimoPMO,
21
+ BlocoGeracaoMinimaUsinasTermicasPMO,
22
+ BlocoGeracaoMaximaUsinasTermicasPMO,
20
23
  )
21
24
 
22
25
  from inewave.newave import Pmo
@@ -37,6 +40,7 @@ from tests.mocks.arquivos.pmo import MockBlocoMARSPMOFinal
37
40
  from tests.mocks.arquivos.pmo import MockBlocoRiscoDeficitENSPMO
38
41
  from tests.mocks.arquivos.pmo import MockBlocoCustoOperacaoPMO
39
42
  from tests.mocks.arquivos.pmo import MockBlocoCustoOperacaoTotalPMO
43
+ from tests.mocks.arquivos.pmo import MockBlocoEnergiaArmazenadaMaximaPMO
40
44
  from tests.mocks.arquivos.pmo import MockBlocoEnergiaArmazenadaInicialPMO
41
45
  from tests.mocks.arquivos.pmo import MockBlocoVolumeArmazenadoInicialPMO
42
46
  from tests.mocks.arquivos.pmo import MockPenalidadeViolacaoOutrosUsosPMO
@@ -50,6 +54,10 @@ from tests.mocks.arquivos.pmo import (
50
54
  from tests.mocks.arquivos.pmo import (
51
55
  MockPenalidadeViolacaoTurbinamentoMaximoPMO,
52
56
  )
57
+ from tests.mocks.arquivos.pmo import (
58
+ MockBlocoGeracaoMinimaUsinasTermicasPMO,
59
+ MockBlocoGeracaoMaximaUsinasTermicasPMO,
60
+ )
53
61
  from tests.mocks.arquivos.pmo import MockPMO
54
62
 
55
63
  ARQ_TESTE = "./tests/mocks/arquivos/__init__.py"
@@ -85,6 +93,23 @@ def test_eafpast_cfuga_medio():
85
93
  assert b.data.iloc[-1, -1] == 409.13
86
94
 
87
95
 
96
+ def test_energia_armazenada_maxima():
97
+ m: MagicMock = mock_open(
98
+ read_data="".join(MockBlocoEnergiaArmazenadaMaximaPMO)
99
+ )
100
+ b = BlocoEnergiaArmazenadaMaximaPMO()
101
+ with patch("builtins.open", m):
102
+ with open("", "") as fp:
103
+ b.read(fp)
104
+
105
+ assert b.data.shape[0] == 720
106
+ assert b.data.shape[1] == 3
107
+ assert b.data.iloc[0, 0] == "SUDESTE"
108
+ assert b.data.iloc[0, 1] == 1
109
+ assert b.data.iloc[0, 2] == 50969.1
110
+ assert b.data.iloc[-1, -1] == 786.0
111
+
112
+
88
113
  def test_energia_armazenada_inicial():
89
114
  m: MagicMock = mock_open(
90
115
  read_data="".join(MockBlocoEnergiaArmazenadaInicialPMO)
@@ -319,6 +344,34 @@ def test_leitura_penalidades_violacao_turbinamento_maximo():
319
344
  assert b.data.iloc[-1, -1] == 842.25
320
345
 
321
346
 
347
+ def test_leitura_geracao_termica_minima_usina():
348
+ m: MagicMock = mock_open(
349
+ read_data="".join(MockBlocoGeracaoMinimaUsinasTermicasPMO)
350
+ )
351
+ b = BlocoGeracaoMinimaUsinasTermicasPMO()
352
+ with patch("builtins.open", m):
353
+ with open("", "") as fp:
354
+ b.read(fp)
355
+
356
+ assert b.data.shape == (420, 4)
357
+ assert b.data.iloc[-1, -2] == 0.00
358
+ assert b.data.iloc[-1, -1] == datetime(2027, 12, 1)
359
+
360
+
361
+ def test_leitura_geracao_termica_maxima_usina():
362
+ m: MagicMock = mock_open(
363
+ read_data="".join(MockBlocoGeracaoMaximaUsinasTermicasPMO)
364
+ )
365
+ b = BlocoGeracaoMaximaUsinasTermicasPMO()
366
+ with patch("builtins.open", m):
367
+ with open("", "") as fp:
368
+ b.read(fp)
369
+
370
+ assert b.data.shape == (60, 4)
371
+ assert b.data.iloc[-1, -2] == 558.02
372
+ assert b.data.iloc[-1, -1] == datetime(2027, 12, 1)
373
+
374
+
322
375
  def test_atributos_encontrados_pmo():
323
376
  m: MagicMock = mock_open(read_data="".join(MockPMO))
324
377
  with patch("builtins.open", m):
@@ -338,6 +391,7 @@ def test_atributos_encontrados_pmo():
338
391
  assert pmo.custo_operacao_total is not None
339
392
  assert pmo.desvio_custo_operacao_total is not None
340
393
  assert pmo.produtibilidades_equivalentes is not None
394
+ assert pmo.energia_armazenada_maxima is not None
341
395
  assert pmo.energia_armazenada_inicial is not None
342
396
  assert pmo.volume_armazenado_inicial is not None
343
397
  assert pmo.penalidade_violacao_outros_usos is not None
@@ -347,6 +401,8 @@ def test_atributos_encontrados_pmo():
347
401
  assert pmo.penalidade_violacao_evaporacao is not None
348
402
  assert pmo.penalidade_violacao_turbinamento_maximo is not None
349
403
  assert pmo.penalidade_violacao_turbinamento_minimo is not None
404
+ assert pmo.geracao_minima_usinas_termicas is not None
405
+ assert pmo.geracao_maxima_usinas_termicas is not None
350
406
 
351
407
 
352
408
  def test_atributos_nao_encontrados_pmo():
@@ -358,6 +414,7 @@ def test_atributos_nao_encontrados_pmo():
358
414
  assert pmo.custo_operacao_total is None
359
415
  assert pmo.desvio_custo_operacao_total is None
360
416
  assert pmo.produtibilidades_equivalentes is None
417
+ assert pmo.energia_armazenada_maxima is None
361
418
  assert pmo.energia_armazenada_inicial is None
362
419
  assert pmo.volume_armazenado_inicial is None
363
420
  assert pmo.penalidade_violacao_outros_usos is None
@@ -367,6 +424,8 @@ def test_atributos_nao_encontrados_pmo():
367
424
  assert pmo.penalidade_violacao_evaporacao is None
368
425
  assert pmo.penalidade_violacao_turbinamento_maximo is None
369
426
  assert pmo.penalidade_violacao_turbinamento_minimo is None
427
+ assert pmo.geracao_minima_usinas_termicas is None
428
+ assert pmo.geracao_maxima_usinas_termicas is None
370
429
 
371
430
 
372
431
  def test_eq_pmo():
@@ -0,0 +1,66 @@
1
+ from inewave.newave.modelos.vazinat import SecaoDadosVazinat
2
+ from inewave.newave.vazinat import Vazinat
3
+ from inewave.config import MAX_ANOS_HISTORICO
4
+
5
+ from tests.mocks.mock_open import mock_open
6
+ from unittest.mock import MagicMock, patch
7
+
8
+
9
+ ARQ_TESTE = "./tests/mocks/arquivos/vazinat.dat"
10
+
11
+ NUM_CONFIGURACOES = 1
12
+ NUM_UHES = 164
13
+ ANO_INICIO_HISTORICO = 1931
14
+ NUM_ENTRADAS = NUM_CONFIGURACOES * NUM_UHES * 12 * MAX_ANOS_HISTORICO
15
+
16
+
17
+ def test_secao_vazinat():
18
+ r = SecaoDadosVazinat()
19
+ with open(ARQ_TESTE, "rb") as fp:
20
+ r.read(
21
+ fp,
22
+ numero_uhes=NUM_UHES,
23
+ ano_inicio_historico=ANO_INICIO_HISTORICO,
24
+ numero_configuracoes=NUM_CONFIGURACOES,
25
+ )
26
+
27
+ assert len(r.data) == NUM_ENTRADAS
28
+
29
+
30
+ def test_atributos_encontrados_vazinat():
31
+ h = Vazinat.read(
32
+ ARQ_TESTE,
33
+ numero_uhes=NUM_UHES,
34
+ ano_inicio_historico=ANO_INICIO_HISTORICO,
35
+ numero_configuracoes=NUM_CONFIGURACOES,
36
+ )
37
+ assert h.series is not None
38
+ assert h.series.isna().sum().sum() == 0
39
+
40
+
41
+ def test_atributos_nao_encontrados_vazinat():
42
+ m: MagicMock = mock_open(read_data="")
43
+ with patch("builtins.open", m):
44
+ h = Vazinat.read(
45
+ ARQ_TESTE,
46
+ numero_uhes=NUM_UHES,
47
+ ano_inicio_historico=ANO_INICIO_HISTORICO,
48
+ numero_configuracoes=NUM_CONFIGURACOES,
49
+ )
50
+ assert h.series.isna().sum().sum() == NUM_ENTRADAS
51
+
52
+
53
+ def test_eq_vazinat():
54
+ h1 = Vazinat.read(
55
+ ARQ_TESTE,
56
+ numero_uhes=NUM_UHES,
57
+ ano_inicio_historico=ANO_INICIO_HISTORICO,
58
+ numero_configuracoes=NUM_CONFIGURACOES,
59
+ )
60
+ h2 = Vazinat.read(
61
+ ARQ_TESTE,
62
+ numero_uhes=NUM_UHES,
63
+ ano_inicio_historico=ANO_INICIO_HISTORICO,
64
+ numero_configuracoes=NUM_CONFIGURACOES,
65
+ )
66
+ assert h1 == h2
@@ -3,15 +3,11 @@ from inewave.nwlistop.mediasmerc import Mediasmerc
3
3
  import pandas as pd # type: ignore
4
4
 
5
5
 
6
- leitor = Mediasmerc.le_arquivo("tests/_arquivos")
6
+ ARQ_TESTE = "tests/_arquivos/MEDIAS-MERC.CSV"
7
7
 
8
8
 
9
9
  def test_eq_mediasmerc():
10
- leitor2 = Mediasmerc.le_arquivo("tests/_arquivos")
10
+ leitor = Mediasmerc.read(ARQ_TESTE)
11
+ leitor2 = Mediasmerc.read(ARQ_TESTE)
11
12
  assert leitor == leitor2
12
-
13
-
14
- def test_neq_mediasmerc():
15
- leitor2 = Mediasmerc.le_arquivo("tests/_arquivos")
16
- leitor2.medias = pd.DataFrame()
17
- assert leitor != leitor2
13
+ assert leitor.valores.shape == (228, 54)
@@ -0,0 +1,12 @@
1
+ # Rotinas de testes associadas ao arquivo MEDIAS-REE.CSV do NWLISTOP
2
+ from inewave.nwlistop.mediasree import Mediasree
3
+
4
+
5
+ ARQ_TESTE = "tests/_arquivos/MEDIAS-REE.CSV"
6
+
7
+
8
+ def test_eq_mediasree():
9
+ leitor = Mediasree.read(ARQ_TESTE)
10
+ leitor2 = Mediasree.read(ARQ_TESTE)
11
+ assert leitor == leitor2
12
+ assert leitor.valores.shape == (720, 49)
@@ -0,0 +1,12 @@
1
+ # Rotinas de testes associadas ao arquivo MEDIAS-REP.CSV do NWLISTOP
2
+ from inewave.nwlistop.mediasrep import Mediasrep
3
+
4
+
5
+ ARQ_TESTE = "tests/_arquivos/MEDIAS-REP.CSV"
6
+
7
+
8
+ def test_eq_mediasrep():
9
+ leitor = Mediasrep.read(ARQ_TESTE)
10
+ leitor2 = Mediasrep.read(ARQ_TESTE)
11
+ assert leitor == leitor2
12
+ assert leitor.valores.shape == (0, 2)
@@ -0,0 +1,12 @@
1
+ # Rotinas de testes associadas ao arquivo MEDIAS-RHQ.CSV do NWLISTOP
2
+ from inewave.nwlistop.mediasrhq import Mediasrhq
3
+
4
+
5
+ ARQ_TESTE = "tests/_arquivos/MEDIAS-RHQ.CSV"
6
+
7
+
8
+ def test_eq_mediasrhq():
9
+ leitor = Mediasrhq.read(ARQ_TESTE)
10
+ leitor2 = Mediasrhq.read(ARQ_TESTE)
11
+ assert leitor == leitor2
12
+ assert leitor.valores.shape == (0, 2)
@@ -0,0 +1,11 @@
1
+ # Rotinas de testes associadas ao arquivo MEDIAS-RHV.CSV do NWLISTOP
2
+ from inewave.nwlistop.mediasrhv import Mediasrhv
3
+
4
+ ARQ_TESTE = "tests/_arquivos/MEDIAS-RHV.CSV"
5
+
6
+
7
+ def test_eq_mediasrhv():
8
+ leitor = Mediasrhv.read(ARQ_TESTE)
9
+ leitor2 = Mediasrhv.read(ARQ_TESTE)
10
+ assert leitor == leitor2
11
+ assert leitor.valores.shape == (0, 2)
@@ -1,17 +1,12 @@
1
1
  # Rotinas de testes associadas ao arquivo MEDIAS-SIN.CSV do NWLISTOP
2
2
  from inewave.nwlistop.mediassin import Mediassin
3
- import pandas as pd # type: ignore
4
3
 
5
4
 
6
- leitor = Mediassin.le_arquivo("tests/_arquivos")
5
+ ARQ_TESTE = "tests/_arquivos/MEDIAS-SIN.CSV"
7
6
 
8
7
 
9
8
  def test_eq_mediassin():
10
- leitor2 = Mediassin.le_arquivo("tests/_arquivos")
9
+ leitor = Mediassin.read(ARQ_TESTE)
10
+ leitor2 = Mediassin.read(ARQ_TESTE)
11
11
  assert leitor == leitor2
12
-
13
-
14
- def test_neq_mediassin():
15
- leitor2 = Mediassin.le_arquivo("tests/_arquivos")
16
- leitor2.medias = pd.DataFrame()
17
- assert leitor != leitor2
12
+ assert leitor.valores.shape == (57, 55)
@@ -0,0 +1,12 @@
1
+ # Rotinas de testes associadas ao arquivo MEDIAS-USIE.CSV do NWLISTOP
2
+ from inewave.nwlistop.mediasusie import Mediasusie
3
+
4
+
5
+ ARQ_TESTE = "tests/_arquivos/MEDIAS-USIE.CSV"
6
+
7
+
8
+ def test_eq_mediasusie():
9
+ leitor = Mediasusie.read(ARQ_TESTE)
10
+ leitor2 = Mediasusie.read(ARQ_TESTE)
11
+ assert leitor == leitor2
12
+ assert leitor.valores.shape == (0, 2)
@@ -0,0 +1,11 @@
1
+ # Rotinas de testes associadas ao arquivo MEDIAS-UISH.CSV do NWLISTOP
2
+ from inewave.nwlistop.mediasusih import Mediasusih
3
+
4
+ ARQ_TESTE = "tests/_arquivos/MEDIAS-USIH.CSV"
5
+
6
+
7
+ def test_eq_mediasusih():
8
+ leitor = Mediasusih.read(ARQ_TESTE)
9
+ leitor2 = Mediasusih.read(ARQ_TESTE)
10
+ assert leitor == leitor2
11
+ assert leitor.valores.shape == (9840, 30)
@@ -0,0 +1,12 @@
1
+ # Rotinas de testes associadas ao arquivo MEDIAS-USIT.CSV do NWLISTOP
2
+ from inewave.nwlistop.mediasusit import Mediasusit
3
+
4
+
5
+ ARQ_TESTE = "tests/_arquivos/MEDIAS-USIT.CSV"
6
+
7
+
8
+ def test_eq_mediasusit():
9
+ leitor = Mediasusit.read(ARQ_TESTE)
10
+ leitor2 = Mediasusit.read(ARQ_TESTE)
11
+ assert leitor == leitor2
12
+ assert leitor.valores.shape == (7680, 5)
@@ -1,57 +0,0 @@
1
- import os
2
- from abc import abstractmethod
3
- from traceback import print_exc
4
- import pandas as pd # type: ignore
5
-
6
-
7
- class LeituraCSV:
8
- """
9
- Classe com utilidades gerais para leitura de arquivos
10
- .csv do NEWAVE.
11
- """
12
-
13
- def __init__(self, diretorio: str):
14
- self._diretorio = diretorio
15
- self._dados = pd.DataFrame()
16
-
17
- def _le_tabela_arquivo(self, caminho: str):
18
- """
19
- Faz a leitura dos blocos de dados do arquivo.
20
- """
21
- self._dados = pd.read_csv(
22
- caminho, sep=",", encoding="utf-8", index_col=1
23
- )
24
-
25
- def _le_arquivo_em_diretorio(
26
- self, diretorio: str, nome_arquivo: str
27
- ) -> None:
28
- """
29
- Faz a leitura do arquivo em um diretorio.
30
- """
31
- try:
32
- caminho = os.path.join(diretorio, nome_arquivo)
33
- self._le_tabela_arquivo(caminho)
34
- self.processa_dados_lidos()
35
- except Exception:
36
- print_exc()
37
-
38
- def le_arquivo(self, nome_arquivo: str) -> pd.DataFrame:
39
- """
40
- Método para ler um arquivo e retornar o objeto
41
- devido da classe em particular.
42
- """
43
- self._le_arquivo_em_diretorio(self._diretorio, nome_arquivo)
44
- return self._dados
45
-
46
- @abstractmethod
47
- def processa_dados_lidos(self):
48
- """ """
49
- pass
50
-
51
- @property
52
- def dados(self) -> pd.DataFrame:
53
- """
54
- Dados de leitura obtidos pelo blocos, organizados
55
- para realizar a criação do objeto associado.
56
- """
57
- return self._dados