pyield 0.48.0__tar.gz → 0.48.2__tar.gz

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 (71) hide show
  1. {pyield-0.48.0 → pyield-0.48.2}/PKG-INFO +4 -5
  2. {pyield-0.48.0 → pyield-0.48.2}/README.md +3 -4
  3. pyield-0.48.2/pyield/__about__.py +1 -0
  4. {pyield-0.48.0 → pyield-0.48.2}/pyield/__init__.py +13 -4
  5. {pyield-0.48.0 → pyield-0.48.2}/pyield/fwd.py +1 -1
  6. pyield-0.48.2/pyield/tn/__init__.py +7 -0
  7. {pyield-0.48.0 → pyield-0.48.2}/pyield/tn/lft.py +6 -6
  8. {pyield-0.48.0 → pyield-0.48.2}/pyield/tn/ltn.py +11 -10
  9. {pyield-0.48.0 → pyield-0.48.2}/pyield/tn/ntnb.py +11 -11
  10. {pyield-0.48.0 → pyield-0.48.2}/pyield/tn/ntnb1.py +6 -6
  11. {pyield-0.48.0 → pyield-0.48.2}/pyield/tn/ntnbprinc.py +2 -2
  12. {pyield-0.48.0 → pyield-0.48.2}/pyield/tn/ntnc.py +7 -7
  13. {pyield-0.48.0 → pyield-0.48.2}/pyield/tn/ntnf.py +13 -12
  14. {pyield-0.48.0 → pyield-0.48.2}/pyield/tn/pre.py +0 -79
  15. {pyield-0.48.0 → pyield-0.48.2}/pyield/tn/utils.py +75 -0
  16. pyield-0.48.0/pyield/__about__.py +0 -1
  17. pyield-0.48.0/pyield/tn/__init__.py +0 -19
  18. {pyield-0.48.0 → pyield-0.48.2}/.gitignore +0 -0
  19. {pyield-0.48.0 → pyield-0.48.2}/LICENSE +0 -0
  20. {pyield-0.48.0 → pyield-0.48.2}/pyield/_internal/__init__.py +0 -0
  21. {pyield-0.48.0 → pyield-0.48.2}/pyield/_internal/br_numbers.py +0 -0
  22. {pyield-0.48.0 → pyield-0.48.2}/pyield/_internal/cache.py +0 -0
  23. {pyield-0.48.0 → pyield-0.48.2}/pyield/_internal/converters.py +0 -0
  24. {pyield-0.48.0 → pyield-0.48.2}/pyield/_internal/data_cache.py +0 -0
  25. {pyield-0.48.0 → pyield-0.48.2}/pyield/_internal/retry.py +0 -0
  26. {pyield-0.48.0 → pyield-0.48.2}/pyield/_internal/types.py +0 -0
  27. {pyield-0.48.0 → pyield-0.48.2}/pyield/anbima/__init__.py +0 -0
  28. {pyield-0.48.0 → pyield-0.48.2}/pyield/anbima/ettj_intradia.py +0 -0
  29. {pyield-0.48.0 → pyield-0.48.2}/pyield/anbima/ettj_ultima.py +0 -0
  30. {pyield-0.48.0 → pyield-0.48.2}/pyield/anbima/ima_ultimo.py +0 -0
  31. {pyield-0.48.0 → pyield-0.48.2}/pyield/anbima/imaq.py +0 -0
  32. {pyield-0.48.0 → pyield-0.48.2}/pyield/anbima/tpf.py +0 -0
  33. {pyield-0.48.0 → pyield-0.48.2}/pyield/b3/__init__.py +0 -0
  34. {pyield-0.48.0 → pyield-0.48.2}/pyield/b3/_contratos.py +0 -0
  35. {pyield-0.48.0 → pyield-0.48.2}/pyield/b3/_validar_pregao.py +0 -0
  36. {pyield-0.48.0 → pyield-0.48.2}/pyield/b3/boletim.py +0 -0
  37. {pyield-0.48.0 → pyield-0.48.2}/pyield/b3/derivativos_intradia.py +0 -0
  38. {pyield-0.48.0 → pyield-0.48.2}/pyield/b3/di1.py +0 -0
  39. {pyield-0.48.0 → pyield-0.48.2}/pyield/b3/di_over.py +0 -0
  40. {pyield-0.48.0 → pyield-0.48.2}/pyield/b3/futuro/__init__.py +0 -0
  41. {pyield-0.48.0 → pyield-0.48.2}/pyield/b3/futuro/contratos.py +0 -0
  42. {pyield-0.48.0 → pyield-0.48.2}/pyield/b3/futuro/historico.py +0 -0
  43. {pyield-0.48.0 → pyield-0.48.2}/pyield/b3/futuro/intradia.py +0 -0
  44. {pyield-0.48.0 → pyield-0.48.2}/pyield/bc/__init__.py +0 -0
  45. {pyield-0.48.0 → pyield-0.48.2}/pyield/bc/compromissada.py +0 -0
  46. {pyield-0.48.0 → pyield-0.48.2}/pyield/bc/copom.py +0 -0
  47. {pyield-0.48.0 → pyield-0.48.2}/pyield/bc/leiloes.py +0 -0
  48. {pyield-0.48.0 → pyield-0.48.2}/pyield/bc/ptax.py +0 -0
  49. {pyield-0.48.0 → pyield-0.48.2}/pyield/bc/taxas.py +0 -0
  50. {pyield-0.48.0 → pyield-0.48.2}/pyield/bc/tpf_intradia.py +0 -0
  51. {pyield-0.48.0 → pyield-0.48.2}/pyield/bc/tpf_mensal.py +0 -0
  52. {pyield-0.48.0 → pyield-0.48.2}/pyield/bc/vna.py +0 -0
  53. {pyield-0.48.0 → pyield-0.48.2}/pyield/dus/__init__.py +0 -0
  54. {pyield-0.48.0 → pyield-0.48.2}/pyield/dus/core.py +0 -0
  55. {pyield-0.48.0 → pyield-0.48.2}/pyield/dus/feriados/__init__.py +0 -0
  56. {pyield-0.48.0 → pyield-0.48.2}/pyield/dus/feriados/feriados_antigos_br.txt +0 -0
  57. {pyield-0.48.0 → pyield-0.48.2}/pyield/dus/feriados/feriados_br.py +0 -0
  58. {pyield-0.48.0 → pyield-0.48.2}/pyield/dus/feriados/feriados_novos_br.txt +0 -0
  59. {pyield-0.48.0 → pyield-0.48.2}/pyield/interpolador.py +0 -0
  60. {pyield-0.48.0 → pyield-0.48.2}/pyield/ipca/__init__.py +0 -0
  61. {pyield-0.48.0 → pyield-0.48.2}/pyield/ipca/historico.py +0 -0
  62. {pyield-0.48.0 → pyield-0.48.2}/pyield/ipca/projetado.py +0 -0
  63. {pyield-0.48.0 → pyield-0.48.2}/pyield/py.typed +0 -0
  64. {pyield-0.48.0 → pyield-0.48.2}/pyield/relogio.py +0 -0
  65. {pyield-0.48.0 → pyield-0.48.2}/pyield/selic/__init__.py +0 -0
  66. {pyield-0.48.0 → pyield-0.48.2}/pyield/selic/cpm.py +0 -0
  67. {pyield-0.48.0 → pyield-0.48.2}/pyield/selic/probabilities.py +0 -0
  68. {pyield-0.48.0 → pyield-0.48.2}/pyield/tn/benchmark.py +0 -0
  69. {pyield-0.48.0 → pyield-0.48.2}/pyield/tn/leiloes.py +0 -0
  70. {pyield-0.48.0 → pyield-0.48.2}/pyield/tn/rmd.py +0 -0
  71. {pyield-0.48.0 → pyield-0.48.2}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyield
3
- Version: 0.48.0
3
+ Version: 0.48.2
4
4
  Summary: A Python library for analysis of fixed income instruments in Brazil
5
5
  Project-URL: Homepage, https://github.com/crdcj/PYield
6
6
  Project-URL: Documentation, https://crdcj.github.io/PYield
@@ -45,6 +45,7 @@ Description-Content-Type: text/markdown
45
45
  [![PyPI version](https://img.shields.io/pypi/v/pyield.svg)](https://pypi.python.org/pypi/pyield)
46
46
  [![Made with Python](https://img.shields.io/badge/Python->=3.12-blue?logo=python&logoColor=white)](https://python.org "Go to Python homepage")
47
47
  [![License](https://img.shields.io/badge/License-MIT-blue)](https://github.com/crdcj/PYield/blob/main/LICENSE)
48
+ [![Docs](https://img.shields.io/badge/docs-GitHub%20Pages-blue?logo=readthedocs&logoColor=white)](https://crdcj.github.io/PYield/)
48
49
 
49
50
  # PYield: Toolkit de Renda Fixa Brasileira
50
51
 
@@ -63,8 +64,7 @@ pip install pyield
63
64
  ## Início Rápido
64
65
 
65
66
  ```python
66
- from pyield import dus, b3, bc, Interpolador
67
- from pyield.tn import ntnb
67
+ from pyield import dus, b3, bc, ntnb, Interpolador
68
68
 
69
69
  # Dias úteis (base de todos os cálculos)
70
70
  dus.contar("02-01-2025", "15-01-2025") # -> 9
@@ -241,8 +241,7 @@ Tratamento de nulos: funções escalares retornam `float('nan')` para entradas a
241
241
  (propaga nos cálculos). Funções vetorizadas propagam `null` elemento a elemento.
242
242
 
243
243
  ```python
244
- from pyield.tn import ntnb
245
- from pyield import dus
244
+ from pyield import ntnb, dus
246
245
 
247
246
  ntnb.cotacao(None, "15-05-2035", 0.06149) # -> nan
248
247
  dus.contar(["01-01-2024", None], "01-02-2024") # -> Series: [22, null]
@@ -1,6 +1,7 @@
1
1
  [![PyPI version](https://img.shields.io/pypi/v/pyield.svg)](https://pypi.python.org/pypi/pyield)
2
2
  [![Made with Python](https://img.shields.io/badge/Python->=3.12-blue?logo=python&logoColor=white)](https://python.org "Go to Python homepage")
3
3
  [![License](https://img.shields.io/badge/License-MIT-blue)](https://github.com/crdcj/PYield/blob/main/LICENSE)
4
+ [![Docs](https://img.shields.io/badge/docs-GitHub%20Pages-blue?logo=readthedocs&logoColor=white)](https://crdcj.github.io/PYield/)
4
5
 
5
6
  # PYield: Toolkit de Renda Fixa Brasileira
6
7
 
@@ -19,8 +20,7 @@ pip install pyield
19
20
  ## Início Rápido
20
21
 
21
22
  ```python
22
- from pyield import dus, b3, bc, Interpolador
23
- from pyield.tn import ntnb
23
+ from pyield import dus, b3, bc, ntnb, Interpolador
24
24
 
25
25
  # Dias úteis (base de todos os cálculos)
26
26
  dus.contar("02-01-2025", "15-01-2025") # -> 9
@@ -197,8 +197,7 @@ Tratamento de nulos: funções escalares retornam `float('nan')` para entradas a
197
197
  (propaga nos cálculos). Funções vetorizadas propagam `null` elemento a elemento.
198
198
 
199
199
  ```python
200
- from pyield.tn import ntnb
201
- from pyield import dus
200
+ from pyield import ntnb, dus
202
201
 
203
202
  ntnb.cotacao(None, "15-05-2035", 0.06149) # -> nan
204
203
  dus.contar(["01-01-2024", None], "01-02-2024") # -> Series: [22, null]
@@ -0,0 +1 @@
1
+ __version__ = "0.48.2"
@@ -1,28 +1,37 @@
1
1
  import logging
2
2
 
3
- from pyield import anbima, b3, bc, dus, ipca, relogio, selic, tn
3
+ from pyield import anbima, b3, bc, dus, ipca, selic, tn
4
4
  from pyield.__about__ import __version__
5
+ from pyield.b3 import di1
5
6
  from pyield.fwd import forward, forwards
6
7
  from pyield.interpolador import Interpolador
7
8
  from pyield.relogio import agora, hoje
8
9
  from pyield.selic.cpm import data as copom_options
10
+ from pyield.tn import lft, ltn, ntnb, ntnb1, ntnbprinc, ntnc, ntnf
9
11
 
10
12
  __all__ = [
11
13
  "Interpolador",
12
14
  "__version__",
15
+ "agora",
13
16
  "anbima",
14
17
  "b3",
15
18
  "bc",
16
19
  "copom_options",
20
+ "di1",
17
21
  "dus",
18
22
  "forward",
19
23
  "forwards",
20
- "agora",
24
+ "hoje",
21
25
  "ipca",
22
- "relogio",
26
+ "lft",
27
+ "ltn",
28
+ "ntnb",
29
+ "ntnb1",
30
+ "ntnbprinc",
31
+ "ntnc",
32
+ "ntnf",
23
33
  "selic",
24
34
  "tn",
25
- "hoje",
26
35
  ]
27
36
 
28
37
  # Configura o logger do pacote principal com um NullHandler
@@ -102,7 +102,7 @@ def forwards(
102
102
  ]
103
103
 
104
104
  >>> # Exemplo com taxas indicativas de NTN-B em 16-09-2025
105
- >>> from pyield.tn import ntnb
105
+ >>> from pyield import ntnb
106
106
  >>> df = ntnb.dados("16-09-2025")
107
107
  >>> yd.forwards(df["dias_uteis"], df["taxa_indicativa"])
108
108
  shape: (13,)
@@ -0,0 +1,7 @@
1
+ from pyield.tn import pre
2
+ from pyield.tn.benchmark import benchmarks
3
+ from pyield.tn.leiloes import leilao
4
+ from pyield.tn.rmd import rmd
5
+ from pyield.tn.utils import premio_pre
6
+
7
+ __all__ = ["benchmarks", "leilao", "pre", "premio_pre", "rmd"]
@@ -33,7 +33,7 @@ def dados(data: DateLike) -> pl.DataFrame:
33
33
  - rentabilidade (Float64): Rentabilidade da LFT sobre o DI.
34
34
 
35
35
  Examples:
36
- >>> from pyield.tn import lft
36
+ >>> from pyield import lft
37
37
  >>> df_lft = lft.dados("23-08-2024") # doctest: +SKIP
38
38
  """
39
39
  df = utils.obter_tpf(data, "LFT")
@@ -86,7 +86,7 @@ def vencimentos(data: DateLike) -> pl.Series:
86
86
  pl.Series: Série de datas de vencimento disponíveis.
87
87
 
88
88
  Examples:
89
- >>> from pyield.tn import lft
89
+ >>> from pyield import lft
90
90
  >>> lft.vencimentos("22-08-2024")
91
91
  shape: (14,)
92
92
  Series: 'data_vencimento' [date]
@@ -125,7 +125,7 @@ def cotacao(
125
125
 
126
126
  Examples:
127
127
  Calcula a cotação de uma LFT com taxa de 0,02:
128
- >>> from pyield.tn import lft
128
+ >>> from pyield import lft
129
129
  >>> lft.cotacao(
130
130
  ... data_liquidacao="24-07-2024",
131
131
  ... data_vencimento="01-09-2030",
@@ -176,7 +176,7 @@ def taxa(
176
176
  caso de erro.
177
177
 
178
178
  Examples:
179
- >>> from pyield.tn import lft
179
+ >>> from pyield import lft
180
180
  >>> lft.taxa("24-07-2024", "01-09-2030", 15785.324502, 15621.867466)
181
181
  0.001717
182
182
  >>> lft.taxa("24-07-2024", "01-03-2025", 15785.324502, 15774.132706)
@@ -209,7 +209,7 @@ def rentabilidade(taxa_lft: float, taxa_di: float) -> float:
209
209
 
210
210
  Examples:
211
211
  Calcula a rentabilidade de uma LFT em 28/04/2025:
212
- >>> from pyield.tn import lft
212
+ >>> from pyield import lft
213
213
  >>> taxa_lft = 0.001124 # 0.1124%
214
214
  >>> taxa_di = 0.13967670224373396 # 13.967670224373396%
215
215
  >>> lft.rentabilidade(taxa_lft, taxa_di)
@@ -250,7 +250,7 @@ def pu(
250
250
  - SEI Proccess 17944.005214/2024-09
251
251
 
252
252
  Examples:
253
- >>> from pyield.tn import lft
253
+ >>> from pyield import lft
254
254
  >>> lft.pu(15785.324502, 99.9291)
255
255
  15774.132706
256
256
  """
@@ -4,7 +4,6 @@ import pyield._internal.converters as cv
4
4
  from pyield import dus, fwd
5
5
  from pyield._internal.types import DateLike, any_is_empty
6
6
  from pyield.tn import utils
7
- from pyield.tn.pre import premio as premio_pre
8
7
 
9
8
  VALOR_FACE = 1000
10
9
 
@@ -41,7 +40,7 @@ def dados(data: DateLike) -> pl.DataFrame:
41
40
  - rentabilidade (Float64): Rentabilidade diária da LTN sobre o DI.
42
41
 
43
42
  Examples:
44
- >>> from pyield.tn import ltn
43
+ >>> from pyield import ltn
45
44
  >>> df_ltn = ltn.dados("23-08-2024") # doctest: +SKIP
46
45
  """
47
46
  df = utils.obter_tpf(data, "LTN")
@@ -100,7 +99,7 @@ def vencimentos(data: DateLike) -> pl.Series:
100
99
  pl.Series: Série de datas de vencimento disponíveis.
101
100
 
102
101
  Examples:
103
- >>> from pyield.tn import ltn
102
+ >>> from pyield import ltn
104
103
  >>> ltn.vencimentos("22-08-2024")
105
104
  shape: (13,)
106
105
  Series: 'data_vencimento' [date]
@@ -141,7 +140,7 @@ def pu(
141
140
  - https://www.anbima.com.br/data/files/A0/02/CC/70/8FEFC8104606BDC8B82BA2A8/Metodologias%20ANBIMA%20de%20Precificacao%20Titulos%20Publicos.pdf
142
141
 
143
142
  Examples:
144
- >>> from pyield.tn import ltn
143
+ >>> from pyield import ltn
145
144
  >>> ltn.pu("05-07-2024", "01-01-2030", 0.12145)
146
145
  535.279902
147
146
  """
@@ -181,7 +180,7 @@ def taxa(
181
180
  caso de erro.
182
181
 
183
182
  Examples:
184
- >>> from pyield.tn import ltn
183
+ >>> from pyield import ltn
185
184
  >>> ltn.taxa("05-07-2024", "01-01-2030", 535.279902)
186
185
  0.12145
187
186
  >>> ltn.taxa("13-03-2026", "01-01-2027", 895.563913)
@@ -214,7 +213,7 @@ def rentabilidade(taxa_ltn: float, taxa_di: float) -> float:
214
213
  Reference date: 22-08-2024
215
214
  LTN rate for 01-01-2030: 0.118746
216
215
  DI (JAN30) Settlement rate: 0.11725
217
- >>> from pyield.tn import ltn
216
+ >>> from pyield import ltn
218
217
  >>> ltn.rentabilidade(0.118746, 0.11725)
219
218
  1.0120718007994287
220
219
  """
@@ -247,7 +246,7 @@ def dv01(
247
246
  float: DV01, variação de preço para 1 bp.
248
247
 
249
248
  Examples:
250
- >>> from pyield.tn import ltn
249
+ >>> from pyield import ltn
251
250
  >>> ltn.dv01("26-03-2025", "01-01-2032", 0.150970)
252
251
  0.2269059999999854
253
252
  """
@@ -291,7 +290,7 @@ def premio(
291
290
  ValueError: Se os dados de DI não possuem 'taxa_ajuste' ou estão vazios.
292
291
 
293
292
  Examples:
294
- >>> from pyield.tn import ltn
293
+ >>> from pyield import ltn
295
294
  >>> ltn.premio("30-05-2025", pontos_base=True)
296
295
  shape: (13, 3)
297
296
  ┌────────┬─────────────────┬────────┐
@@ -312,7 +311,9 @@ def premio(
312
311
  │ LTN ┆ 2032-01-01 ┆ 11.24 │
313
312
  └────────┴─────────────────┴────────┘
314
313
  """
315
- return premio_pre(data, pontos_base=pontos_base).filter(pl.col("titulo") == "LTN")
314
+ return utils.premio_pre(data, pontos_base=pontos_base).filter(
315
+ pl.col("titulo") == "LTN"
316
+ )
316
317
 
317
318
 
318
319
  def taxas_forward(data: DateLike) -> pl.DataFrame:
@@ -335,7 +336,7 @@ def taxas_forward(data: DateLike) -> pl.DataFrame:
335
336
  - taxa_forward (Float64): Taxa forward.
336
337
 
337
338
  Examples:
338
- >>> from pyield.tn import ltn
339
+ >>> from pyield import ltn
339
340
  >>> ltn.taxas_forward("17-10-2025")
340
341
  shape: (13, 4)
341
342
  ┌─────────────────┬────────────┬─────────────────┬──────────────┐
@@ -55,7 +55,7 @@ def dados(data: DateLike) -> pl.DataFrame:
55
55
  a partir de taxas nominais do DI Futuro e taxas zero das NTN-B.
56
56
 
57
57
  Examples:
58
- >>> from pyield.tn import ntnb
58
+ >>> from pyield import ntnb
59
59
  >>> df_ntnb = ntnb.dados("23-08-2024") # doctest: +SKIP
60
60
  """
61
61
  from pyield.b3 import di1 # noqa: PLC0415
@@ -129,7 +129,7 @@ def vencimentos(data: DateLike) -> pl.Series:
129
129
  pl.Series: Série de datas de vencimento de NTN-B.
130
130
 
131
131
  Examples:
132
- >>> from pyield.tn import ntnb
132
+ >>> from pyield import ntnb
133
133
  >>> ntnb.vencimentos("16-08-2024")
134
134
  shape: (14,)
135
135
  Series: 'data_vencimento' [date]
@@ -198,7 +198,7 @@ def datas_pagamento(
198
198
  vencimento for menor ou igual à liquidação.
199
199
 
200
200
  Examples:
201
- >>> from pyield.tn import ntnb
201
+ >>> from pyield import ntnb
202
202
  >>> ntnb.datas_pagamento("10-05-2024", "15-05-2025")
203
203
  shape: (3,)
204
204
  Series: 'datas_pagamento' [date]
@@ -246,7 +246,7 @@ def fluxos_caixa(
246
246
  - valor_pagamento (Float64): Valor do pagamento.
247
247
 
248
248
  Examples:
249
- >>> from pyield.tn import ntnb
249
+ >>> from pyield import ntnb
250
250
  >>> ntnb.fluxos_caixa("10-05-2024", "15-05-2025")
251
251
  shape: (3, 2)
252
252
  ┌────────────────┬─────────────────┐
@@ -309,7 +309,7 @@ def cotacao(
309
309
  semestral e arredondamento para 6 casas, conforme ANBIMA.
310
310
 
311
311
  Examples:
312
- >>> from pyield.tn import ntnb
312
+ >>> from pyield import ntnb
313
313
  >>> ntnb.cotacao("31-05-2024", "15-05-2035", 0.061490)
314
314
  99.3651
315
315
  >>> ntnb.cotacao("31-05-2024", "15-08-2060", 0.061878)
@@ -361,7 +361,7 @@ def pu(
361
361
  - https://www.anbima.com.br/data/files/A0/02/CC/70/8FEFC8104606BDC8B82BA2A8/Metodologias%20ANBIMA%20de%20Precificacao%20Titulos%20Publicos.pdf
362
362
 
363
363
  Examples:
364
- >>> from pyield.tn import ntnb
364
+ >>> from pyield import ntnb
365
365
  >>> ntnb.pu(4299.160173, 99.3651)
366
366
  4271.864805
367
367
  >>> ntnb.pu(4315.498383, 100.6409)
@@ -497,7 +497,7 @@ def taxas_zero(
497
497
  - taxa_zero (Float64): Taxa zero (real).
498
498
 
499
499
  Examples:
500
- >>> from pyield.tn import ntnb
500
+ >>> from pyield import ntnb
501
501
  >>> # Busca as taxas de NTN-B para uma data de referência
502
502
  >>> df = ntnb.dados("16-08-2024")
503
503
  >>> # Calcula as taxas zero considerando a liquidação na data de referência
@@ -707,7 +707,7 @@ def duration(
707
707
  float: Macaulay duration em anos úteis.
708
708
 
709
709
  Examples:
710
- >>> from pyield.tn import ntnb
710
+ >>> from pyield import ntnb
711
711
  >>> ntnb.duration("23-08-2024", "15-08-2060", 0.061005)
712
712
  15.08305431313046
713
713
  """
@@ -745,7 +745,7 @@ def dv01(
745
745
  float: DV01, variação de preço para 1 bp.
746
746
 
747
747
  Examples:
748
- >>> from pyield.tn import ntnb
748
+ >>> from pyield import ntnb
749
749
  >>> ntnb.dv01("26-03-2025", "15-08-2060", 0.074358, 4470.979474)
750
750
  4.640875999999935
751
751
  """
@@ -783,7 +783,7 @@ def taxa(
783
783
  caso de erro.
784
784
 
785
785
  Examples:
786
- >>> from pyield.tn import ntnb
786
+ >>> from pyield import ntnb
787
787
  >>> ntnb.taxa("31-05-2024", "15-05-2035", 4299.160173, 4271.864805)
788
788
  0.06149
789
789
  >>> ntnb.taxa("15-08-2024", "15-08-2032", 4315.498383, 4343.156412)
@@ -825,7 +825,7 @@ def forward(
825
825
  - taxa_forward (Float64): Taxa forward calculada.
826
826
 
827
827
  Examples:
828
- >>> from pyield.tn import ntnb
828
+ >>> from pyield import ntnb
829
829
  >>> ntnb.forward("17-10-2025", usar_taxa_zero=True)
830
830
  shape: (13, 4)
831
831
  ┌─────────────────┬────────────┬─────────────────┬──────────────┐
@@ -70,7 +70,7 @@ def datas_pagamento(
70
70
  pl.Series: Série de datas de amortização no intervalo.
71
71
 
72
72
  Examples:
73
- >>> from pyield.tn import ntnb1
73
+ >>> from pyield import ntnb1
74
74
  >>> r_mais = ntnb1.NomeComercial.RENDA_MAIS
75
75
  >>> ntnb1.datas_pagamento("10-05-2024", "15-12-2050", r_mais)
76
76
  shape: (240,)
@@ -139,7 +139,7 @@ def fluxos_caixa(
139
139
  - valor_pagamento (Float64): Valor do pagamento.
140
140
 
141
141
  Examples:
142
- >>> from pyield.tn import ntnb1
142
+ >>> from pyield import ntnb1
143
143
  >>> r_mais = ntnb1.NomeComercial.RENDA_MAIS
144
144
  >>> ntnb1.fluxos_caixa("10-05-2024", "15-12-2060", r_mais)
145
145
  shape: (240, 2)
@@ -210,7 +210,7 @@ def cotacao(
210
210
  - https://www.anbima.com.br/data/files/A0/02/CC/70/8FEFC8104606BDC8B82BA2A8/Metodologias%20ANBIMA%20de%20Precificacao%20Titulos%20Publicos.pdf
211
211
 
212
212
  Examples:
213
- >>> from pyield.tn import ntnb1
213
+ >>> from pyield import ntnb1
214
214
  >>> r_mais = ntnb1.NomeComercial.RENDA_MAIS
215
215
  >>> ntnb1.cotacao("18-06-2025", "15-12-2084", 0.07010, r_mais)
216
216
  0.038332
@@ -247,7 +247,7 @@ def pu(
247
247
  - SEI Proccess 17944.005214/2024-09
248
248
 
249
249
  Examples:
250
- >>> from pyield.tn import ntnb1
250
+ >>> from pyield import ntnb1
251
251
  >>> ntnb1.pu(4299.160173, 99.3651 / 100)
252
252
  4271.864805
253
253
  >>> ntnb1.pu(4315.498383, 100.6409 / 100)
@@ -277,7 +277,7 @@ def duration(
277
277
  float: Macaulay duration em anos úteis.
278
278
 
279
279
  Examples:
280
- >>> from pyield.tn import ntnb1
280
+ >>> from pyield import ntnb1
281
281
  >>> r_mais = ntnb1.NomeComercial.RENDA_MAIS
282
282
  >>> ntnb1.duration("23-06-2025", "15-12-2084", 0.0686, r_mais)
283
283
  47.10493458167134
@@ -318,7 +318,7 @@ def dv01(
318
318
  float: DV01, variação de preço para 1 bp.
319
319
 
320
320
  Examples:
321
- >>> from pyield.tn import ntnb1
321
+ >>> from pyield import ntnb1
322
322
  >>> r_mais = ntnb1.NomeComercial.RENDA_MAIS
323
323
  >>> ntnb1.dv01("23-06-2025", "15-12-2084", 0.0686, 4299.160173, r_mais)
324
324
  0.7738490000000127
@@ -25,7 +25,7 @@ def pu(
25
25
  - https://www.anbima.com.br/data/files/A0/02/CC/70/8FEFC8104606BDC8B82BA2A8/Metodologias%20ANBIMA%20de%20Precificacao%20Titulos%20Publicos.pdf
26
26
 
27
27
  Examples:
28
- >>> from pyield.tn import ntnbprinc
28
+ >>> from pyield import ntnbprinc
29
29
  >>> ntnbprinc.pu("02-12-2025", "15-05-2029", 0.0777, 4567.033825)
30
30
  3537.763157
31
31
  """
@@ -65,7 +65,7 @@ def dv01(
65
65
  float: DV01 (Dollar Value of 01), variação de preço para 1 bp.
66
66
 
67
67
  Examples:
68
- >>> from pyield.tn import ntnbprinc as bp
68
+ >>> from pyield import ntnbprinc as bp
69
69
  >>> bp.dv01("02-12-2025", "15-05-2029", 0.0777, 4567.033825)
70
70
  1.1200559999997495
71
71
  """
@@ -68,7 +68,7 @@ def dados(data: DateLike) -> pl.DataFrame:
68
68
  método flat forward.
69
69
 
70
70
  Examples:
71
- >>> from pyield.tn import ntnc
71
+ >>> from pyield import ntnc
72
72
  >>> ntnc.dados("23-08-2024") # doctest: +SKIP
73
73
  """
74
74
  df = utils.obter_tpf(data, "NTN-C")
@@ -123,7 +123,7 @@ def datas_pagamento(
123
123
  vencimento for menor que a liquidação.
124
124
 
125
125
  Examples:
126
- >>> from pyield.tn import ntnc
126
+ >>> from pyield import ntnc
127
127
  >>> ntnc.datas_pagamento("21-03-2025", "01-01-2031")
128
128
  shape: (12,)
129
129
  Series: 'datas_pagamento' [date]
@@ -184,7 +184,7 @@ def fluxos_caixa(
184
184
  - valor_pagamento (Float64): Valor do pagamento.
185
185
 
186
186
  Examples:
187
- >>> from pyield.tn import ntnc
187
+ >>> from pyield import ntnc
188
188
  >>> ntnc.fluxos_caixa("21-03-2025", "01-01-2031")
189
189
  shape: (12, 2)
190
190
  ┌────────────────┬─────────────────┐
@@ -259,7 +259,7 @@ def cotacao(
259
259
  semestral e arredondamento para 6 casas, conforme ANBIMA.
260
260
 
261
261
  Examples:
262
- >>> from pyield.tn import ntnc
262
+ >>> from pyield import ntnc
263
263
  >>> ntnc.cotacao("21-03-2025", "01-01-2031", 0.067626)
264
264
  126.4958
265
265
  """
@@ -310,7 +310,7 @@ def pu(
310
310
  - https://www.anbima.com.br/data/files/A0/02/CC/70/8FEFC8104606BDC8B82BA2A8/Metodologias%20ANBIMA%20de%20Precificacao%20Titulos%20Publicos.pdf
311
311
 
312
312
  Examples:
313
- >>> from pyield.tn import ntnc
313
+ >>> from pyield import ntnc
314
314
  >>> ntnc.pu(6598.913723, 126.4958)
315
315
  8347.348705
316
316
  """
@@ -341,7 +341,7 @@ def taxa(
341
341
  caso de erro.
342
342
 
343
343
  Examples:
344
- >>> from pyield.tn import ntnc
344
+ >>> from pyield import ntnc
345
345
  >>> ntnc.taxa("21-03-2025", "01-01-2031", 6598.913723, 8347.348705)
346
346
  0.067626
347
347
  """
@@ -376,7 +376,7 @@ def duracao(
376
376
  float: Macaulay duration em anos úteis.
377
377
 
378
378
  Examples:
379
- >>> from pyield.tn import ntnc
379
+ >>> from pyield import ntnc
380
380
  >>> ntnc.duracao("21-03-2025", "01-01-2031", 0.067626)
381
381
  4.405363320448
382
382
  """
@@ -10,7 +10,6 @@ from pyield import dus
10
10
  from pyield._internal.types import ArrayLike, DateLike, any_is_empty
11
11
  from pyield.b3 import di1
12
12
  from pyield.tn import utils
13
- from pyield.tn.pre import premio as premio_pre
14
13
 
15
14
  """
16
15
  Constantes calculadas conforme regras da ANBIMA
@@ -62,7 +61,7 @@ def dados(data: DateLike) -> pl.DataFrame:
62
61
  - rentabilidade (Float64): Rentabilidade da NTN-F sobre a curva DI.
63
62
 
64
63
  Examples:
65
- >>> from pyield.tn import ntnf
64
+ >>> from pyield import ntnf
66
65
  >>> df_ntnf = ntnf.dados("23-08-2024") # doctest: +SKIP
67
66
  """
68
67
  df = utils.obter_tpf(data, "NTN-F")
@@ -154,7 +153,7 @@ def vencimentos(data: DateLike) -> pl.Series:
154
153
  pl.Series: Série de datas de vencimento de NTN-F.
155
154
 
156
155
  Examples:
157
- >>> from pyield.tn import ntnf
156
+ >>> from pyield import ntnf
158
157
  >>> ntnf.vencimentos("23-08-2024")
159
158
  shape: (6,)
160
159
  Series: 'data_vencimento' [date]
@@ -191,7 +190,7 @@ def datas_pagamento(
191
190
  for menor ou igual à liquidação.
192
191
 
193
192
  Examples:
194
- >>> from pyield.tn import ntnf
193
+ >>> from pyield import ntnf
195
194
  >>> ntnf.datas_pagamento("15-05-2024", "01-01-2027")
196
195
  shape: (6,)
197
196
  Series: 'datas_pagamento' [date]
@@ -251,7 +250,7 @@ def fluxos_caixa(
251
250
  - valor_pagamento (Float64): Valor do pagamento.
252
251
 
253
252
  Examples:
254
- >>> from pyield.tn import ntnf
253
+ >>> from pyield import ntnf
255
254
  >>> ntnf.fluxos_caixa("15-05-2024", "01-01-2027")
256
255
  shape: (6, 2)
257
256
  ┌────────────────┬─────────────────┐
@@ -340,7 +339,7 @@ def pu(
340
339
  semestral e arredondamento para 5 casas, conforme ANBIMA.
341
340
 
342
341
  Examples:
343
- >>> from pyield.tn import ntnf
342
+ >>> from pyield import ntnf
344
343
  >>> ntnf.pu("05-07-2024", "01-01-2035", 0.11921)
345
344
  895.359254
346
345
  """
@@ -383,7 +382,7 @@ def taxas_zero( # noqa
383
382
  - taxa_zero (Float64): Taxa zero (zero cupom).
384
383
 
385
384
  Examples:
386
- >>> from pyield.tn import ntnf, ltn
385
+ >>> from pyield import ntnf, ltn
387
386
  >>> df_ltn = ltn.dados("03-09-2024")
388
387
  >>> df_ntnf = ntnf.dados("03-09-2024")
389
388
  >>> ntnf.taxas_zero(
@@ -659,7 +658,7 @@ def premio(data: DateLike, pontos_base: bool = False) -> pl.DataFrame:
659
658
  ValueError: Se os dados de DI não possuem 'taxa_ajuste' ou estão vazios.
660
659
 
661
660
  Examples:
662
- >>> from pyield.tn import ntnf
661
+ >>> from pyield import ntnf
663
662
  >>> ntnf.premio("30-05-2025", pontos_base=True)
664
663
  shape: (5, 3)
665
664
  ┌────────┬─────────────────┬────────┐
@@ -674,7 +673,9 @@ def premio(data: DateLike, pontos_base: bool = False) -> pl.DataFrame:
674
673
  │ NTN-F ┆ 2035-01-01 ┆ 22.0 │
675
674
  └────────┴─────────────────┴────────┘
676
675
  """
677
- return premio_pre(data, pontos_base=pontos_base).filter(pl.col("titulo") == "NTN-F")
676
+ return utils.premio_pre(data, pontos_base=pontos_base).filter(
677
+ pl.col("titulo") == "NTN-F"
678
+ )
678
679
 
679
680
 
680
681
  def premio_limpo( # noqa
@@ -778,7 +779,7 @@ def duration(
778
779
  float: Macaulay duration em anos úteis. Retorna NaN se inválido.
779
780
 
780
781
  Examples:
781
- >>> from pyield.tn import ntnf
782
+ >>> from pyield import ntnf
782
783
  >>> ntnf.duration("02-09-2024", "01-01-2035", 0.121785)
783
784
  6.32854218039796
784
785
  """
@@ -814,7 +815,7 @@ def dv01(
814
815
  float: DV01, variação de preço para 1 bp.
815
816
 
816
817
  Examples:
817
- >>> from pyield.tn import ntnf
818
+ >>> from pyield import ntnf
818
819
  >>> ntnf.dv01("26-03-2025", "01-01-2035", 0.151375)
819
820
  0.39025200000003224
820
821
  """
@@ -846,7 +847,7 @@ def taxa(
846
847
  float: TIR implícita em formato decimal. Retorna NaN em caso de erro.
847
848
 
848
849
  Examples:
849
- >>> from pyield.tn import ntnf
850
+ >>> from pyield import ntnf
850
851
  >>> pu = ntnf.pu("05-07-2024", "01-01-2035", 0.11921)
851
852
  >>> ntnf.taxa("13-03-2026", "01-01-2035", 820.995125)
852
853
  0.142743
@@ -1,6 +1,5 @@
1
1
  import polars as pl
2
2
 
3
- import pyield._internal.converters as cv
4
3
  from pyield import dus
5
4
  from pyield._internal.types import DateLike
6
5
  from pyield.tn import ntnf, utils
@@ -137,81 +136,3 @@ def _validar_resultado_final(df: pl.DataFrame) -> None:
137
136
 
138
137
  if df["taxa_zero"].is_null().any():
139
138
  raise ValueError("Resultado final contém NaN na coluna taxa_zero")
140
-
141
-
142
- def premio(
143
- data: DateLike,
144
- pontos_base: bool = False,
145
- ) -> pl.DataFrame:
146
- """
147
- Calcula o prêmio dos títulos prefixados (LTN e NTN-F) sobre o DI.
148
-
149
- Em linguagem de mercado, esse valor é chamado de prêmio. Em termos
150
- descritivos, trata-se do spread sobre o DI.
151
-
152
- Definição do prêmio:
153
- premio = taxa indicativa do PRE - taxa de ajuste do DI
154
-
155
- Quando ``pontos_base=False`` a coluna retorna essa diferença em formato
156
- decimal (ex: 0.000439 ≈ 4.39 bps). Quando ``pontos_base=True`` o valor é
157
- automaticamente
158
- multiplicado por 10_000 e exibido diretamente em basis points.
159
-
160
- Args:
161
- data: Data da consulta para buscar as taxas.
162
- pontos_base: Se True, retorna o prêmio já convertido em basis points.
163
- Padrão False.
164
-
165
- Returns:
166
- pl.DataFrame: DataFrame com as colunas do prêmio.
167
-
168
- Output Columns:
169
- - titulo (String): Tipo do título.
170
- - data_vencimento (Date): Data de vencimento.
171
- - premio (Float64): prêmio em decimal ou bps conforme parâmetro
172
- (spread sobre o DI).
173
-
174
- Examples:
175
- >>> from pyield.tn import pre
176
- >>> pre.premio("30-05-2025", pontos_base=True)
177
- shape: (18, 3)
178
- ┌────────┬─────────────────┬────────┐
179
- │ titulo ┆ data_vencimento ┆ premio │
180
- │ --- ┆ --- ┆ --- │
181
- │ str ┆ date ┆ f64 │
182
- ╞════════╪═════════════════╪════════╡
183
- │ LTN ┆ 2025-07-01 ┆ 4.39 │
184
- │ LTN ┆ 2025-10-01 ┆ -9.0 │
185
- │ LTN ┆ 2026-01-01 ┆ -4.88 │
186
- │ LTN ┆ 2026-04-01 ┆ -4.45 │
187
- │ LTN ┆ 2026-07-01 ┆ 0.81 │
188
- │ … ┆ … ┆ … │
189
- │ NTN-F ┆ 2027-01-01 ┆ -3.31 │
190
- │ NTN-F ┆ 2029-01-01 ┆ 14.21 │
191
- │ NTN-F ┆ 2031-01-01 ┆ 21.61 │
192
- │ NTN-F ┆ 2033-01-01 ┆ 11.51 │
193
- │ NTN-F ┆ 2035-01-01 ┆ 22.0 │
194
- └────────┴─────────────────┴────────┘
195
- """
196
- # Busca taxas dos títulos (LTN e NTN-F) e adiciona taxa_di
197
- df = utils.obter_tpf(data, "PRE").select(
198
- "titulo", "data_vencimento", "taxa_indicativa"
199
- )
200
- if df.is_empty():
201
- return df.select(
202
- pl.lit("").alias("titulo"),
203
- pl.lit(None, dtype=pl.Date).alias("data_vencimento"),
204
- pl.lit(None, dtype=pl.Float64).alias("premio"),
205
- ).clear()
206
- data_ref = cv.converter_datas(data)
207
- df = utils.adicionar_taxa_di(df, data_ref)
208
- df = (
209
- df.with_columns(premio=pl.col("taxa_indicativa") - pl.col("taxa_di"))
210
- .select("titulo", "data_vencimento", "premio")
211
- .sort("titulo", "data_vencimento")
212
- )
213
-
214
- if pontos_base:
215
- df = df.with_columns(pl.col("premio") * 10_000)
216
-
217
- return df
@@ -6,6 +6,7 @@ from typing import overload
6
6
 
7
7
  import polars as pl
8
8
 
9
+ import pyield._internal.converters as cv
9
10
  from pyield._internal.types import DateLike
10
11
  from pyield.anbima.tpf import TipoTPF
11
12
 
@@ -298,3 +299,77 @@ def encontrar_raiz(func_diferenca_preco: Callable[[float], float]) -> float:
298
299
 
299
300
  a, b = intervalo
300
301
  return _metodo_bissecao(func_diferenca_preco, a, b)
302
+
303
+
304
+ def premio_pre(
305
+ data: DateLike,
306
+ pontos_base: bool = False,
307
+ ) -> pl.DataFrame:
308
+ """Calcula o prêmio dos títulos prefixados (LTN e NTN-F) sobre o DI.
309
+
310
+ Em linguagem de mercado, esse valor é chamado de prêmio. Em termos
311
+ descritivos, trata-se do spread sobre o DI.
312
+
313
+ Definição do prêmio:
314
+ premio = taxa indicativa do PRE - taxa de ajuste do DI
315
+
316
+ Quando ``pontos_base=False`` a coluna retorna essa diferença em formato
317
+ decimal (ex: 0.000439 ≈ 4.39 bps). Quando ``pontos_base=True`` o valor
318
+ é automaticamente multiplicado por 10_000 e exibido diretamente em
319
+ basis points.
320
+
321
+ Args:
322
+ data: Data da consulta para buscar as taxas.
323
+ pontos_base: Se True, retorna o prêmio já convertido em basis
324
+ points. Padrão False.
325
+
326
+ Returns:
327
+ pl.DataFrame: DataFrame com as colunas do prêmio.
328
+
329
+ Output Columns:
330
+ - titulo (String): Tipo do título.
331
+ - data_vencimento (Date): Data de vencimento.
332
+ - premio (Float64): prêmio em decimal ou bps conforme parâmetro
333
+ (spread sobre o DI).
334
+
335
+ Examples:
336
+ >>> from pyield.tn import utils
337
+ >>> utils.premio_pre("30-05-2025", pontos_base=True)
338
+ shape: (18, 3)
339
+ ┌────────┬─────────────────┬────────┐
340
+ │ titulo ┆ data_vencimento ┆ premio │
341
+ │ --- ┆ --- ┆ --- │
342
+ │ str ┆ date ┆ f64 │
343
+ ╞════════╪═════════════════╪════════╡
344
+ │ LTN ┆ 2025-07-01 ┆ 4.39 │
345
+ │ LTN ┆ 2025-10-01 ┆ -9.0 │
346
+ │ LTN ┆ 2026-01-01 ┆ -4.88 │
347
+ │ LTN ┆ 2026-04-01 ┆ -4.45 │
348
+ │ LTN ┆ 2026-07-01 ┆ 0.81 │
349
+ │ … ┆ … ┆ … │
350
+ │ NTN-F ┆ 2027-01-01 ┆ -3.31 │
351
+ │ NTN-F ┆ 2029-01-01 ┆ 14.21 │
352
+ │ NTN-F ┆ 2031-01-01 ┆ 21.61 │
353
+ │ NTN-F ┆ 2033-01-01 ┆ 11.51 │
354
+ │ NTN-F ┆ 2035-01-01 ┆ 22.0 │
355
+ └────────┴─────────────────┴────────┘
356
+ """
357
+ df = obter_tpf(data, "PRE").select("titulo", "data_vencimento", "taxa_indicativa")
358
+ if df.is_empty():
359
+ return df.select(
360
+ pl.lit("").alias("titulo"),
361
+ pl.lit(None, dtype=pl.Date).alias("data_vencimento"),
362
+ pl.lit(None, dtype=pl.Float64).alias("premio"),
363
+ ).clear()
364
+ data_ref = cv.converter_datas(data)
365
+ df = adicionar_taxa_di(df, data_ref)
366
+ df = (
367
+ df.with_columns(premio=pl.col("taxa_indicativa") - pl.col("taxa_di"))
368
+ .select("titulo", "data_vencimento", "premio")
369
+ .sort("titulo", "data_vencimento")
370
+ )
371
+
372
+ if pontos_base:
373
+ df = df.with_columns(pl.col("premio") * 10_000)
374
+
375
+ return df
@@ -1 +0,0 @@
1
- __version__ = "0.48.0"
@@ -1,19 +0,0 @@
1
- from pyield.tn.benchmark import benchmarks
2
- from pyield.tn.leiloes import leilao
3
- from pyield.tn.pre import premio
4
- from pyield.tn.rmd import rmd
5
-
6
- __all__ = [
7
- "benchmarks",
8
- "leilao",
9
- "lft",
10
- "ltn",
11
- "ntnb",
12
- "ntnb1",
13
- "ntnbprinc",
14
- "ntnc",
15
- "ntnf",
16
- "pre",
17
- "premio",
18
- "rmd",
19
- ]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes