tesorotools-python 0.0.21__tar.gz → 0.0.23__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 (63) hide show
  1. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23}/PKG-INFO +4 -4
  2. tesorotools_python-0.0.23/pyproject.toml +63 -0
  3. tesorotools_python-0.0.23/src/tesorotools/artists/__init__.py +9 -0
  4. tesorotools_python-0.0.23/src/tesorotools/artists/barh.md +109 -0
  5. tesorotools_python-0.0.23/src/tesorotools/artists/barh_plot.py +513 -0
  6. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/artists/line_plot.py +284 -245
  7. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/artists/table.py +225 -200
  8. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/artists/type_curve.py +238 -218
  9. tesorotools_python-0.0.23/src/tesorotools/convert.py +109 -0
  10. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/data_sources/debug.py +27 -26
  11. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/data_sources/lseg.py +111 -117
  12. tesorotools_python-0.0.23/src/tesorotools/database/__init__.py +11 -0
  13. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/database/local.py +54 -46
  14. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/database/push.py +21 -22
  15. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/dependencies/node.py +5 -4
  16. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/dependencies/resolution.py +127 -118
  17. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/main.py +37 -37
  18. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/offsets/offsets.py +459 -439
  19. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/images.py +152 -147
  20. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/section.py +53 -53
  21. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/subtitle.py +56 -53
  22. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/table.py +355 -315
  23. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/text.py +21 -23
  24. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/title.py +41 -40
  25. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/report.py +31 -31
  26. tesorotools_python-0.0.23/src/tesorotools/utils/__init__.py +3 -0
  27. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/utils/config.py +38 -35
  28. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/utils/format.py +8 -8
  29. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/utils/matplotlib.py +38 -38
  30. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/utils/series.py +44 -40
  31. tesorotools_python-0.0.23/src/tesorotools/utils/shortcuts.py +35 -0
  32. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/utils/template.py +16 -10
  33. tesorotools_python-0.0.21/pyproject.toml +0 -30
  34. tesorotools_python-0.0.21/tesorotools/artists/__init__.py +0 -5
  35. tesorotools_python-0.0.21/tesorotools/artists/barh_plot.py +0 -310
  36. tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Black.otf +0 -0
  37. tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Bold.otf +0 -0
  38. tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Extrabold.otf +0 -0
  39. tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Extralight.otf +0 -0
  40. tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Light.otf +0 -0
  41. tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Medium.otf +0 -0
  42. tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Regular.otf +0 -0
  43. tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Thin.otf +0 -0
  44. tesorotools_python-0.0.21/tesorotools/convert.py +0 -99
  45. tesorotools_python-0.0.21/tesorotools/database/__init__.py +0 -1
  46. tesorotools_python-0.0.21/tesorotools/utils/__init__.py +0 -3
  47. tesorotools_python-0.0.21/tesorotools/utils/shortcuts.py +0 -31
  48. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23}/.gitignore +0 -0
  49. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/__init__.py +0 -0
  50. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/assets/README.md +0 -0
  51. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/assets/fonts/README.md +0 -0
  52. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/assets/plots.yaml +0 -0
  53. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/assets/tesoro.mplstyle +0 -0
  54. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/data_sources/README.md +0 -0
  55. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/data_sources/__init__.py +0 -0
  56. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/dependencies/__init__.py +0 -0
  57. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/dependencies/functions.py +0 -0
  58. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/offsets/__init__.py +0 -0
  59. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/offsets/outliers.py +0 -0
  60. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/__init__.py +0 -0
  61. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/__init__.py +0 -0
  62. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/content.py +0 -0
  63. {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/utils/globals.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tesorotools-python
3
- Version: 0.0.21
3
+ Version: 0.0.23
4
4
  Requires-Python: >=3.13
5
5
  Requires-Dist: babel
6
6
  Requires-Dist: eikon
@@ -8,9 +8,9 @@ Requires-Dist: lseg-data
8
8
  Requires-Dist: matplotlib
9
9
  Requires-Dist: openpyxl
10
10
  Requires-Dist: pandas
11
- Requires-Dist: psycopg2
11
+ Requires-Dist: psycopg[binary]
12
12
  Requires-Dist: pyarrow
13
13
  Requires-Dist: python-docx
14
- Requires-Dist: pywin32>=311; sys_platform != 'linux'
14
+ Requires-Dist: pywin32>=311; sys_platform == 'win32'
15
15
  Requires-Dist: pyyaml
16
- Requires-Dist: sqlalchemy
16
+ Requires-Dist: sqlalchemy>=2.0
@@ -0,0 +1,63 @@
1
+ [project]
2
+ name = "tesorotools-python"
3
+ requires-python = ">=3.13"
4
+ version = "0.0.23"
5
+ dependencies = [
6
+ # database and ORM
7
+ "psycopg[binary]",
8
+ "SQLAlchemy>=2.0",
9
+
10
+ # data analysis
11
+ "pandas",
12
+ "pyarrow",
13
+ "openpyxl",
14
+
15
+ # utils
16
+ "PyYAML",
17
+ "babel",
18
+ "eikon",
19
+ "lseg-data",
20
+
21
+ # data visualization
22
+ "matplotlib",
23
+ "python-docx",
24
+
25
+ # os dependencies
26
+ "pywin32>=311; sys_platform == 'win32'"
27
+ ]
28
+
29
+ [dependency-groups]
30
+ dev = [
31
+ "ruff>=0.8",
32
+ "pyright>=1.1",
33
+ "pre-commit>=4.0",
34
+ "pandas-stubs>=2.2",
35
+ "coverage>=7.0",
36
+ ]
37
+
38
+ [build-system]
39
+ requires = ["hatchling"]
40
+ build-backend = "hatchling.build"
41
+
42
+ [tool.hatch.build.targets.wheel]
43
+ packages = ["src/tesorotools"]
44
+ artifacts = ["src/tesorotools/assets/fonts/*.otf"]
45
+
46
+ [tool.hatch.build.targets.sdist]
47
+ include = ["src/tesorotools"]
48
+ artifacts = ["src/tesorotools/assets/fonts/*.otf"]
49
+
50
+ [tool.coverage.report]
51
+ exclude_lines = [
52
+ 'if __name__ == "__main__"',
53
+ '^\s*\.\.\.$',
54
+ 'if TYPE_CHECKING',
55
+ ]
56
+
57
+ [tool.ruff]
58
+ line-length = 80
59
+
60
+ [tool.pyright]
61
+ pythonVersion = "3.13"
62
+ extraPaths = ["src"]
63
+ typeCheckingMode = "strict"
@@ -0,0 +1,9 @@
1
+ import matplotlib.style
2
+
3
+ from tesorotools.artists.barh_plot import HorizontalBarChart
4
+ from tesorotools.utils.config import TemplateLoader
5
+
6
+ from ..utils.globals import STYLE_SHEET
7
+
8
+ matplotlib.style.use(STYLE_SHEET)
9
+ TemplateLoader.add_constructor("!barh", HorizontalBarChart.from_yaml)
@@ -0,0 +1,109 @@
1
+ # Especificación de gráficos de barras horizontales
2
+
3
+ En un archivo `.yaml` los gráficos de barras horizontales se especifican con el constructor `!barh`.
4
+
5
+ ## Series y bloques de series
6
+
7
+ Pueden especificarse, o bien *series*, con la entrada `series` o bien *bloques de series* con la entrada `blocks`, pero no ambas a la vez.
8
+
9
+ - Cada serie en la entrada `series` representará una barra en el gráfico final.
10
+ - Los *bloques de series* utilizan para controlar los colores de las barras. Las series dentro de un mismo bloque tendrán el mismo color en el gráfico final.
11
+
12
+ ```yaml
13
+ test_plot1: !barh
14
+ blocks:
15
+ block1:
16
+ label: name_to_be_displayed_1
17
+ series:
18
+ series_name_1: series_name_to_be_displayed_1
19
+ series_name_2: series_name_to_be_displayed_2*
20
+ block2:
21
+ label: name_to_be_displayed_2
22
+ series:
23
+ series_name_3: series_name_to_be_displayed_3
24
+ series_name_4: series_name_to_be_displayed_4
25
+
26
+ test_plot2: !barh
27
+ series:
28
+ series_name_5: series_name_to_be_displayed_5
29
+ series_name_6: series_name_to_be_displayed_6
30
+ ```
31
+
32
+ ### Cómo destacar una serie
33
+ Si añadimos un `*` al nombre de una serie, esta será marcada como destacada en el gráfico. Concretamente, se le añadirá cierta transparencia.
34
+
35
+ ## Qué muestra un gráfico de barras horizontales
36
+
37
+ Un gráfico de barras horizontales puede mostrar hasta dos conjuntos de valores asociados de forma simultánea.
38
+
39
+ - Si $(x_1,...,x_n)$ es un conjunto de valores, un gráfico de barras horizontales presenta estos valores de forma que cada uno de ellos queda asociado a una barra de longitud proporcional a su valor.
40
+ - Este conjunto de valores está representado por una *serie* de *pandas* y suele recibir, internamente, el nombre de `value_series`.
41
+ - Opcionalmente, podemos querer acompañar cada valor (o solo algunos) $x_i$ con otro valor auxiliar $y_i$ para añadir contexto.
42
+ - Estos valores auxiliares $y_i$ se monstrarán con el formato que decidamos, entre paréntesis, al lado del nombre asociado al valor $x_i$, en el eje de ordenadas.
43
+ - Este conjunto de valores está respresentado por una *serie* de *pandas* y suele recibir, internamente, el nombre de `axis_series`.
44
+
45
+ ### Formato del eje *x*
46
+ Para especificar el número de decimales, la escala y las unidades que queremos que se muestren para los valores presentados en forma de barras (nótese que esta configración afectará al aspecto del eje *x*) podemos usar la entrada `format`.
47
+
48
+ ```yaml
49
+ nombre_del_grafico: !barh
50
+ # other stuff
51
+ format:
52
+ decimals: 0
53
+ units: "%"
54
+ scale: 100
55
+
56
+ ```
57
+
58
+ ### Formato de los valores representados en el eje *y*
59
+ Para especificar el número de decimales, la escala y las unidades que queremos que se muestren para los valores auxiliares presentados numéricamente en el eje *y*, podemos usar la entrada `axis_format`.
60
+
61
+ ```yaml
62
+ nombre_del_grafico: !barh
63
+ # other stuff
64
+ axis_format:
65
+ decimals: 2
66
+ units: €
67
+ scale: 1
68
+ ```
69
+
70
+ ### Formato de las anotaciones sobre las barras
71
+ En ocasiones es dificil ver el valor exacto asociado a cada barra, sobre todo cuando no hay muchas marcas en el eje $x$, la rejilla es demasiado clara, o la barra queda muy lejos del eje.
72
+
73
+ Para solventar este problema, podemos, opcionalmente, añadir una anotación al lado de cada una de las barras que indique numéricamente, y con el formato que queramos, el valor asociado a cada una de ellas. Para ello, podemos usar la entrada `annot_format`.
74
+
75
+ ```yaml
76
+ nombre_del_grafico: !barh
77
+ # other stuff
78
+ annot_format:
79
+ decimals: 2
80
+ units: €
81
+ scale: 1
82
+ ```
83
+
84
+ ## Ordenar las barras por longitud
85
+
86
+ Usualmente querremos que las barras del gráfico se muestren ordenadas, para ellos podemos usar la entrada `sorted`, que se tomará como `True` por defecto.
87
+
88
+ - *TO DO*: Quizá aquí sería interesante añadir una entrada `ascending` que indique cómo ordenar las barras en caso de que la entrada `sorted` esté a `True`, y que será ignorada en caso de que `sorted` esté a `False`.
89
+
90
+ ```yaml
91
+ nombre_del_grafico: !barh
92
+ # other stuff
93
+ sorted: True # default
94
+
95
+ ```
96
+
97
+ ## Gráficos de series a partir de *dataframes* con formato *flash*
98
+
99
+ ### Entrada *flash*
100
+
101
+ ```yaml
102
+ nombre_del_gráfico: !barh
103
+ # other stuff
104
+ flash:
105
+ date: # if None takes last date
106
+ deviations: True
107
+ offset: ftd # friday to date
108
+ difference: relative # relative/absolute difference
109
+ ```