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.
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23}/PKG-INFO +4 -4
- tesorotools_python-0.0.23/pyproject.toml +63 -0
- tesorotools_python-0.0.23/src/tesorotools/artists/__init__.py +9 -0
- tesorotools_python-0.0.23/src/tesorotools/artists/barh.md +109 -0
- tesorotools_python-0.0.23/src/tesorotools/artists/barh_plot.py +513 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/artists/line_plot.py +284 -245
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/artists/table.py +225 -200
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/artists/type_curve.py +238 -218
- tesorotools_python-0.0.23/src/tesorotools/convert.py +109 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/data_sources/debug.py +27 -26
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/data_sources/lseg.py +111 -117
- tesorotools_python-0.0.23/src/tesorotools/database/__init__.py +11 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/database/local.py +54 -46
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/database/push.py +21 -22
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/dependencies/node.py +5 -4
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/dependencies/resolution.py +127 -118
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/main.py +37 -37
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/offsets/offsets.py +459 -439
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/images.py +152 -147
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/section.py +53 -53
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/subtitle.py +56 -53
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/table.py +355 -315
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/text.py +21 -23
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/title.py +41 -40
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/report.py +31 -31
- tesorotools_python-0.0.23/src/tesorotools/utils/__init__.py +3 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/utils/config.py +38 -35
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/utils/format.py +8 -8
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/utils/matplotlib.py +38 -38
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/utils/series.py +44 -40
- tesorotools_python-0.0.23/src/tesorotools/utils/shortcuts.py +35 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/utils/template.py +16 -10
- tesorotools_python-0.0.21/pyproject.toml +0 -30
- tesorotools_python-0.0.21/tesorotools/artists/__init__.py +0 -5
- tesorotools_python-0.0.21/tesorotools/artists/barh_plot.py +0 -310
- tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Black.otf +0 -0
- tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Bold.otf +0 -0
- tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Extrabold.otf +0 -0
- tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Extralight.otf +0 -0
- tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Light.otf +0 -0
- tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Medium.otf +0 -0
- tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Regular.otf +0 -0
- tesorotools_python-0.0.21/tesorotools/assets/fonts/CabinetGrotesk-Thin.otf +0 -0
- tesorotools_python-0.0.21/tesorotools/convert.py +0 -99
- tesorotools_python-0.0.21/tesorotools/database/__init__.py +0 -1
- tesorotools_python-0.0.21/tesorotools/utils/__init__.py +0 -3
- tesorotools_python-0.0.21/tesorotools/utils/shortcuts.py +0 -31
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23}/.gitignore +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/__init__.py +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/assets/README.md +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/assets/fonts/README.md +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/assets/plots.yaml +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/assets/tesoro.mplstyle +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/data_sources/README.md +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/data_sources/__init__.py +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/dependencies/__init__.py +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/dependencies/functions.py +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/offsets/__init__.py +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/offsets/outliers.py +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/__init__.py +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/__init__.py +0 -0
- {tesorotools_python-0.0.21 → tesorotools_python-0.0.23/src}/tesorotools/render/content/content.py +0 -0
- {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.
|
|
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:
|
|
11
|
+
Requires-Dist: psycopg[binary]
|
|
12
12
|
Requires-Dist: pyarrow
|
|
13
13
|
Requires-Dist: python-docx
|
|
14
|
-
Requires-Dist: pywin32>=311; sys_platform
|
|
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
|
+
```
|