Coverage for tbkit/save.py: 100%
44 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-22 13:16 +0100
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-22 13:16 +0100
1from __future__ import annotations
3import os
4from matplotlib.figure import Figure
5from matplotlib.animation import FuncAnimation
6import tbkit.error_handling as error_handling
9#################################
10# CLASS SAVE
11#################################
14class Save():
15 '''
16 Create folder and save figures / animations obtained via
17 **plot** or **propagation**.
19 :param dir_name: String. Name of the sub-directory the figures are stored in.
20 :param dir_main: String. Default value None. Path of the main directory.
21 If None, figures are stored under ``'figs/'``.
22 :param params: Dictionary. Default value None. Parameters appended to file names.
23 :param file_format: Default value 'png'. Figure format.
24 '''
25 def __init__(
26 self,
27 dir_name: str,
28 dir_main: str | None = None,
29 params: dict | None = None,
30 file_format: str = 'png',
31 ) -> None:
32 error_handling.string(dir_name, 'dir_name')
33 error_handling.string(dir_main, 'dir_main')
34 error_handling.file_format(file_format)
35 self.params = {} if params is None else params
36 self.file_format = file_format
37 if dir_main is None:
38 self.dir_main = 'figs/'
39 else:
40 self.dir_main = dir_main
41 self.dir_name = self.dir_main + dir_name
42 self.create_dir()
44 def create_dir(self) -> None:
45 '''
46 Create the directory to store the figures exists.
47 '''
48 if not os.path.exists(self.dir_main):
49 os.makedirs(self.dir_main)
50 if not os.path.exists(self.dir_name):
51 os.makedirs(self.dir_name)
53 def file_name(self) -> str:
54 '''
55 Create the file name.
57 :returns:
58 * **file_name** -- File name.
59 '''
60 file_name = ''
61 for key, val in self.params.items():
62 file_name += '_' + key + str(complex(val+0)).replace('.', ',')
63 return file_name
65 def fig(self, fig: Figure, name: str) -> None:
66 '''
67 Save the figure in the directory defined by the method *dir_name()*.
69 :param fig: Matplotlib fig.
70 :param name: String. Fist part of the file name.
71 '''
72 error_handling.fig(fig)
73 error_handling.string(name, 'name')
74 name_file = self.dir_name + '/' + name + self.file_name() + '.' + self.file_format
75 fig.savefig(name_file, format=self.file_format)
77 def fig_lat(self, fig: Figure, name: str) -> None:
78 '''
79 Save the figure in the directory defined by the method *dir_name()*.
81 :param fig: Matplotlib fig.
82 :param name: String. First part of the file name.
83 '''
84 error_handling.fig(fig)
85 error_handling.string(name, 'name')
86 name_file = self.dir_name + '/' + name + '.' + self.file_format
87 fig.savefig(name_file, format=self.file_format)
89 def ani(self, ani: FuncAnimation, name: str, fps: int = 10) -> None:
90 error_handling.ani(ani)
91 error_handling.string(name, 'name')
92 error_handling.positive_int(fps, 'fps')
93 name_file = self.dir_name + '/' + name + '.mp4'
94 ani.save(name_file, fps=fps, extra_args=['-vcodec', 'libx264'])
97# Backward-compatible lowercase alias (pre-0.2 API).
98save = Save