plotext-plus 1.0.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.
plotext_plus/_core.py ADDED
@@ -0,0 +1,581 @@
1
+ # /usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+
4
+ # This file contains all the main plotext functions available externally to the user
5
+
6
+ ##############################################
7
+ ########### Initialisation #############
8
+ ##############################################
9
+
10
+ import plotext_plus._doc
11
+ from plotext_plus._doc_utils import documentation as doc
12
+ from plotext_plus._doc_utils import add
13
+
14
+ from ._figure import _figure_class
15
+ from time import sleep as _sleep
16
+ import plotext_plus._global as _glob
17
+ from plotext_plus import __version__
18
+ import plotext_plus._utility as _ut
19
+
20
+ _figure = _glob.figure # the main figure at top level (defined in _global.py because it is useful also there)
21
+
22
+ ##############################################
23
+ ######### Subplots Functions ###########
24
+ ##############################################
25
+
26
+ def subplots(rows = None, cols = None):
27
+ sub = _figure._active.subplots(rows, cols)
28
+ _figure.show() if _figure._interactive else None
29
+ return sub
30
+
31
+ def subplot(row = None, col = None):
32
+ sub = _figure.subplot(row, col)
33
+ _figure.show() if _figure._interactive else None
34
+ return sub
35
+
36
+ def main():
37
+ return _figure.main()
38
+
39
+ def active():
40
+ return _figure._active
41
+
42
+ ##############################################
43
+ ####### Outside Set Functions ##########
44
+ ##############################################
45
+
46
+ def interactive(interactive = None):
47
+ _figure._set_interactive(interactive)
48
+
49
+ def plot_size(width = None, height = None):
50
+ size = _figure._active.plot_size(width, height)
51
+ _figure.show() if _figure._interactive else None
52
+ return size
53
+ plotsize = plot_size
54
+
55
+ def limit_size(width = None, height = None):
56
+ #_figure._master._set_size()
57
+ _figure._master._limit_size(width, height)
58
+ limitsize = limit_size
59
+
60
+ def take_min():
61
+ _figure._active.take_min()
62
+ takemin = take_min
63
+
64
+ def title(label):
65
+ _figure._active.title(label)
66
+ _figure.show() if _figure._interactive else None
67
+
68
+ def xlabel(label = None, xside = None):
69
+ _figure._active.xlabel(label = label, xside = xside)
70
+ _figure.show() if _figure._interactive else None
71
+
72
+ def ylabel(label = None, yside = None):
73
+ _figure._active.ylabel(label = label, yside = yside)
74
+ _figure.show() if _figure._interactive else None
75
+
76
+ def xlim(left = None, right = None, xside = None):
77
+ _figure._active.xlim(left = left, right = right, xside = xside)
78
+ _figure.show() if _figure._interactive else None
79
+
80
+ def ylim(lower = None, upper = None, yside = None):
81
+ _figure._active.ylim(lower = lower, upper = upper, yside = yside)
82
+ _figure.show() if _figure._interactive else None
83
+
84
+ def xscale(scale = None, xside = None):
85
+ _figure._active.xscale(scale = scale, xside = xside)
86
+ _figure.show() if _figure._interactive else None
87
+
88
+ def yscale(scale = None, yside = None):
89
+ _figure._active.yscale(scale = scale, yside = yside)
90
+ _figure.show() if _figure._interactive else None
91
+
92
+ def xticks(ticks = None, labels = None, xside = None):
93
+ _figure._active.xticks(ticks = ticks, labels = labels, xside = xside)
94
+ _figure.show() if _figure._interactive else None
95
+
96
+ def yticks(ticks = None, labels = None, yside = None):
97
+ _figure._active.yticks(ticks = ticks, labels = labels, yside = yside)
98
+ _figure.show() if _figure._interactive else None
99
+
100
+ def xfrequency(frequency = None, xside = None):
101
+ _figure._active.xfrequency(frequency = frequency, xside = xside)
102
+ _figure.show() if _figure._interactive else None
103
+
104
+ def yfrequency(frequency = None, yside = None):
105
+ _figure._active.yfrequency(frequency = frequency, yside = yside)
106
+ _figure.show() if _figure._interactive else None
107
+
108
+ def xreverse(reverse = None, xside = None):
109
+ _figure._active.xreverse(reverse = reverse, xside = xside)
110
+ _figure.show() if _figure._interactive else None
111
+
112
+ def yreverse(reverse = None, yside = None):
113
+ _figure._active.yreverse(reverse = reverse, yside = yside)
114
+ _figure.show() if _figure._interactive else None
115
+
116
+ def xaxes(lower = None, upper = None):
117
+ _figure._active.xaxes(lower = lower, upper = upper)
118
+ _figure.show() if _figure._interactive else None
119
+
120
+ def yaxes(left = None, right = None):
121
+ _figure._active.yaxes(left = left, right = right)
122
+ _figure.show() if _figure._interactive else None
123
+
124
+ def frame(frame = None):
125
+ _figure._active.frame(frame = frame)
126
+ _figure.show() if _figure._interactive else None
127
+
128
+ def grid(horizontal = None, vertical = None):
129
+ _figure._active.grid(horizontal = horizontal, vertical = vertical)
130
+ _figure.show() if _figure._interactive else None
131
+
132
+ def canvas_color(color = None):
133
+ _figure._active.canvas_color(color)
134
+ _figure.show() if _figure._interactive else None
135
+
136
+ def axes_color(color = None):
137
+ _figure._active.axes_color(color)
138
+ _figure.show() if _figure._interactive else None
139
+
140
+ def ticks_color(color = None):
141
+ _figure._active.ticks_color(color)
142
+ _figure.show() if _figure._interactive else None
143
+
144
+ def ticks_style(style = None):
145
+ _figure._active.ticks_style(style)
146
+ _figure.show() if _figure._interactive else None
147
+
148
+ def theme(theme = None):
149
+ _figure._active.theme(theme)
150
+ _figure.show() if _figure._interactive else None
151
+
152
+ ##############################################
153
+ ########### Clear Functions ############
154
+ ##############################################
155
+
156
+ def clear_figure():
157
+ _figure._active.clear_figure()
158
+ _figure.show() if _figure._interactive else None
159
+ clf = clear_figure
160
+
161
+ def clear_data():
162
+ _figure._active.clear_data()
163
+ _figure.show() if _figure._interactive else None
164
+ cld = clear_data
165
+
166
+ def clear_color():
167
+ _figure._active.clear_color()
168
+ _figure.show() if _figure._interactive else None
169
+ clc = clear_color
170
+
171
+ def clear_terminal(lines = None):
172
+ _figure._active.clear_terminal(lines = lines)
173
+ clt = clear_terminal
174
+
175
+ ##############################################
176
+ ###### Main Plotting Functions #########
177
+ ##############################################
178
+
179
+ def scatter(*args, marker = None, color = None, style = None, fillx = None, filly = None, xside = None, yside = None, label = None):
180
+ _figure._active.scatter(*args, xside = xside, yside = yside, marker = marker, color = color, style = style, fillx = fillx, filly = filly, label = label)
181
+ _figure.show() if _figure._interactive else None
182
+
183
+ def plot(*args, marker = None, color = None, style = None, fillx = None, filly = None, xside = None, yside = None, label = None):
184
+ _figure._active.plot(*args, xside = xside, yside = yside, marker = marker, color = color, fillx = fillx, filly = filly, label = label)
185
+ _figure.show() if _figure._interactive else None
186
+
187
+ def candlestick(dates, data, xside = None, yside = None, orientation = None, colors = None, label = None):
188
+ _figure._active.candlestick(dates, data, xside = xside, yside = yside, orientation = orientation, colors = colors, label = label)
189
+ _figure.show() if _figure._interactive else None
190
+
191
+ def bar(*args, marker = None, color = None, fill = None, width = None, orientation = None, minimum = None, reset_ticks = None, xside = None, yside = None, label = None):
192
+ _figure._active.bar(*args, xside = xside, yside = yside, marker = marker, color = color, fill = fill, width = width, orientation = orientation, label = label, minimum = minimum, reset_ticks = reset_ticks)
193
+ _figure.show() if _figure._interactive else None
194
+
195
+ def simple_bar(*args, marker = None, color = None, title = None, width = None):
196
+ _glob.simple_bar(*args, width = width, marker = marker, color = color, title = title)
197
+ _figure.show() if _figure._interactive else None
198
+
199
+ def multiple_bar(*args, marker = None, color = None, fill = None, width = None, orientation = None, minimum = None, reset_ticks = None, xside = None, yside = None, labels = None):
200
+ _figure._active.multiple_bar(*args, xside = xside, yside = yside, marker = marker, color = color, fill = fill, width = width, orientation = orientation, labels = labels, minimum = minimum, reset_ticks = reset_ticks)
201
+ _figure.show() if _figure._interactive else None
202
+
203
+ def simple_multiple_bar(*args, marker = None, colors = None, title = None, width = None, labels = None):
204
+ _glob.simple_multiple_bar(*args, width = width, marker = marker, colors = colors, title = title, labels = labels)
205
+ _figure.show() if _figure._interactive else None
206
+
207
+ def stacked_bar(*args, marker = None, color = None, fill = None, width = None, orientation = None, minimum = None, reset_ticks = None, xside = None, yside = None, labels = None):
208
+ _figure._active.stacked_bar(*args, xside = xside, yside = yside, marker = marker, color = color, fill = fill, width = width, orientation = orientation, labels = labels, minimum = minimum, reset_ticks = reset_ticks)
209
+ _figure.show() if _figure._interactive else None
210
+
211
+ def simple_stacked_bar(*args, marker = None, colors = None, title = None, width = None, labels = None):
212
+ _glob.simple_stacked_bar(*args, width = width, marker = marker, colors = colors, title = title, labels = labels)
213
+ _figure.show() if _figure._interactive else None
214
+
215
+ def hist(data, bins = None, marker = None, color = None, fill = None, norm = None, width = None, orientation = None, minimum = None, xside = None, yside = None, label = None):
216
+ _figure._active.hist(data, bins = bins, norm = norm, xside = xside, yside = yside, marker = marker, color = color, fill = fill, width = width, orientation = orientation, label = label, minimum = minimum)
217
+ _figure.show() if _figure._interactive else None
218
+
219
+ def candlestick(dates, data, colors = None, orientation = None, xside = None, yside = None, label = None):
220
+ _figure._active.candlestick(dates, data, xside = xside, yside = yside, orientation = orientation, colors = colors, label = label)
221
+ _figure.show() if _figure._interactive else None
222
+
223
+ def box(*args, quintuples = None, colors = None, fill = None, width = None, orientation = None, minimum = None, reset_ticks = None, xside = None, yside = None, label = None):
224
+ _figure._active.box(*args, xside = xside, yside = yside, orientation = orientation, colors = colors, label = label, fill=fill, width = width, minimum = minimum, reset_ticks = reset_ticks, quintuples = quintuples)
225
+ _figure.show() if _figure._interactive else None
226
+
227
+ ##############################################
228
+ ########### Plotting Tools #############
229
+ ##############################################
230
+
231
+ def error(*args, xerr = None, yerr = None, color = None, xside = None, yside = None, label = None):
232
+ _figure.error(*args, xerr = xerr, yerr = yerr, xside = xside, yside = yside, color = color, label = label)
233
+ _figure.show() if _figure._interactive else None
234
+
235
+ def event_plot(data, marker = None, color = None, orientation = None, side = None):
236
+ _figure._active.event_plot(data, orientation = orientation, marker = marker, color = color, side = side)
237
+ _figure.show() if _figure._interactive else None
238
+
239
+ eventplot = event_plot
240
+
241
+ def vertical_line(coordinate, color = None, xside = None):
242
+ _figure._active.vertical_line(coordinate, color = color, xside = xside)
243
+ _figure.show() if _figure._interactive else None
244
+ vline = vertical_line
245
+
246
+ def horizontal_line(coordinate, color = None, yside = None):
247
+ _figure._active.horizontal_line(coordinate, color = color, yside = yside)
248
+ _figure.show() if _figure._interactive else None
249
+ hline = horizontal_line
250
+
251
+ def text(label, x, y, color = None, background = None, style = None, orientation = None, alignment = None, xside = None, yside = None):
252
+ _figure._active.text(label, x, y, xside = xside, yside = yside, color = color, background = background, style = style, orientation = orientation, alignment = alignment)
253
+ _figure.show() if _figure._interactive else None
254
+
255
+ def rectangle(x = None, y = None, marker = None, color = None, lines = None, fill = None, xside = None, yside = None, label = None):
256
+ _figure._active.rectangle(x = x, y = y, xside = xside, yside = yside, lines = lines, marker = marker, color = color, fill = fill, label = label)
257
+ _figure.show() if _figure._interactive else None
258
+
259
+ def polygon(x = None, y = None, radius = None, sides = None, marker = None, color = None, lines = None, fill = None, xside = None, yside = None, label = None):
260
+ _figure._active.polygon(x = x, y = y, radius = radius, sides = sides, xside = xside, yside = yside, lines = lines, marker = marker, color = color, fill = fill, label = label)
261
+ _figure.show() if _figure._interactive else None
262
+
263
+ def confusion_matrix(actual, predicted, color = None, style = None, labels = None):
264
+ _figure._active.confusion_matrix(actual, predicted, labels = labels, color = color, style = style)
265
+ _figure.show() if _figure._interactive else None
266
+
267
+ cmatrix = confusion_matrix
268
+
269
+ def indicator(value, label = None, color = None, style = None):
270
+ _figure._active.indicator(value, label = label, color = color, style = style)
271
+ _figure.show() if _figure._interactive else None
272
+
273
+ ##############################################
274
+ ############## 2D Plots ################
275
+ ##############################################
276
+
277
+ def matrix_plot(matrix, marker = None, style = None, fast = False):
278
+ _figure._active.matrix_plot(matrix, marker = marker, style = style, fast = fast)
279
+ _figure.show() if _figure._interactive else None
280
+
281
+ def heatmap(dataframe, color = None, style=None):
282
+ _figure._active.heatmap(dataframe, color = color, style = style)
283
+ _figure.show() if _figure._interactive else None
284
+
285
+ def image_plot(path, marker = None, style = None, fast = False, grayscale = False):
286
+ _figure._active.image_plot(path, marker = marker, style = style, grayscale = grayscale, fast = fast)
287
+ _figure.show() if _figure._interactive else None
288
+
289
+ def play_gif(path):
290
+ _glob.play_gif(path)
291
+ _figure.show() if _figure._interactive else None
292
+
293
+ def play_video(path, from_youtube = False):
294
+ _glob.play_video(path, from_youtube)
295
+ _figure.show() if _figure._interactive else None
296
+
297
+ def play_youtube(url):
298
+ _glob.play_youtube(url)
299
+ _figure.show() if _figure._interactive else None
300
+
301
+ def get_youtube(url, path = None, log = True):
302
+ _glob.get_youtube(url, path, log)
303
+
304
+ ##############################################
305
+ ########## Build Functions #############
306
+ ##############################################
307
+
308
+ def show():
309
+ _figure.show()
310
+
311
+ def build():
312
+ return _figure.build()
313
+
314
+ def sleep(time = 0):
315
+ _sleep(time)
316
+
317
+ def time(show = True):
318
+ return _figure._get_time(show)
319
+
320
+ def save_fig(path = None, append = False, keep_colors = False):
321
+ _figure.save_fig(path, append, keep_colors)
322
+ savefig = save_fig
323
+
324
+ def from_matplotlib(fig, marker = None):
325
+ _glob.from_matplotlib(fig, marker = marker)
326
+
327
+ ##############################################
328
+ ########## Output Functions ############
329
+ ##############################################
330
+
331
+ def banner_mode(enabled = True, title = None):
332
+ """Enable or disable banner mode for chart output using chuk-term"""
333
+ from plotext_plus._output import set_output_mode
334
+ set_output_mode(enabled, title)
335
+
336
+ def output_info(message):
337
+ """Output info message using chuk-term styling"""
338
+ from plotext_plus._output import info
339
+ info(message)
340
+
341
+ def output_success(message):
342
+ """Output success message using chuk-term styling"""
343
+ from plotext_plus._output import success
344
+ success(message)
345
+
346
+ def output_warning(message):
347
+ """Output warning message using chuk-term styling"""
348
+ from plotext_plus._output import warning
349
+ warning(message)
350
+
351
+ def output_error(message):
352
+ """Output error message using chuk-term styling"""
353
+ from plotext_plus._output import error
354
+ error(message)
355
+
356
+ ##############################################
357
+ ########## Date Functions #############
358
+ ##############################################
359
+
360
+ def date_form(input_form = None, output_form = None):
361
+ _figure._active.date_form(input_form, output_form)
362
+
363
+ def set_time0(string, input_form = None):
364
+ _figure._active.set_time0(string, input_form = input_form)
365
+
366
+ def today_datetime():
367
+ return _figure._active.today_datetime()
368
+
369
+ def today_string(output_form = None):
370
+ return _figure._active.today_string(output_form)
371
+
372
+ def datetime_to_string(datetime, output_form = None):
373
+ return _figure._active.datetime_to_string(datetime, output_form = output_form)
374
+
375
+ def datetimes_to_strings(datetimes, output_form = None):
376
+ return _figure._active.datetimes_to_strings(datetimes, output_form = output_form)
377
+
378
+ datetimes_to_string = datetimes_to_strings
379
+
380
+ def string_to_datetime(string, input_form = None):
381
+ return _figure._active.string_to_datetime(string, input_form = input_form)
382
+
383
+ def string_to_time(string, input_form = None):##########ADD DOC############
384
+ return _figure._active.string_to_time(string, input_form = input_form)
385
+
386
+ def strings_to_time(string, input_form = None):##########ADD DOC############
387
+ return _figure._active.strings_to_time(string, input_form = input_form)
388
+
389
+ ##############################################
390
+ ########## File Functions ############
391
+ ##############################################
392
+
393
+ script_folder = _ut.script_folder
394
+
395
+ def parent_folder(path, level = 1):
396
+ return _ut.parent_folder(path, level = level)
397
+
398
+ def join_paths(*args):
399
+ return _ut.join_paths(*args)
400
+
401
+ def save_text(text, path, log = True):
402
+ _ut.save_text(text, path, log = log)
403
+
404
+ def read_data(path, delimiter = None, columns = None, first_row = None, log = True):
405
+ return _ut.read_data(path, delimiter = delimiter, columns = columns, first_row = first_row, log = log)
406
+
407
+ def write_data(data, path, delimiter = None, columns = None, log = True):
408
+ _ut.write_data(data, path, delimiter = delimiter, columns = columns, log = log)
409
+
410
+ def download(url, path, log = True):
411
+ _ut.download(url, path, log)
412
+
413
+ def delete_file(path, log = True):
414
+ _ut.delete_file(path, log = log)
415
+
416
+ test_data_url = _glob.test_data_url
417
+ test_bar_data_url = _glob.test_bar_data_url
418
+ test_image_url = _glob.test_image_url
419
+ test_gif_url = _glob.test_gif_url
420
+ test_video_url = _glob.test_video_url
421
+ test_youtube_url = _glob.test_youtube_url
422
+
423
+ ##############################################
424
+ ########## Other Functions ############
425
+ ##############################################
426
+
427
+ def colorize(string, color = None, style = None, background = None, show = False):
428
+ return _ut.colorize(string, color = color, style = style, background = background, show = show)
429
+
430
+ def uncolorize(string):
431
+ return _ut.uncolorize(string)
432
+
433
+ def terminal_size():
434
+ return _ut.terminal_size()
435
+
436
+ ts = terminal_size
437
+
438
+ def terminal_width():
439
+ return _ut.terminal_width()
440
+
441
+ tw = terminal_width
442
+
443
+ def terminal_height():
444
+ return _ut.terminal_height()
445
+
446
+ th = terminal_height
447
+
448
+ def sin(periods = 2, length = 200, amplitude = 1, phase = 0, decay = 0):
449
+ return _ut.sin(periods = periods, length = length, amplitude = amplitude, phase = phase, decay = decay)
450
+
451
+ def square(periods = 2, length = 200, amplitude = 1):
452
+ return _ut.square(periods = periods, length = length, amplitude = amplitude)
453
+
454
+ def transpose(data):
455
+ return _ut.transpose(data)
456
+
457
+ colors = _glob.colors
458
+
459
+ styles = _glob.styles
460
+
461
+ markers = _glob.markers
462
+
463
+ themes = _glob.themes
464
+
465
+ test = _glob.test
466
+
467
+ version = __version__
468
+
469
+ platform = _ut.platform
470
+
471
+ ##############################################
472
+ ############ Docstrings ###############
473
+ ##############################################
474
+
475
+ add(subplots)
476
+ add(subplot)
477
+ add(main)
478
+ add(active)
479
+
480
+ add(interactive)
481
+ add(plot_size)
482
+ add(limit_size)
483
+ add(take_min)
484
+
485
+ add(title)
486
+ add(xlabel)
487
+ add(ylabel)
488
+ add(xlim)
489
+ add(ylim)
490
+ add(xscale)
491
+ add(yscale)
492
+ add(xticks)
493
+ add(yticks)
494
+ add(xfrequency)
495
+ add(yfrequency)
496
+ add(xreverse)
497
+ add(yreverse)
498
+ add(xaxes)
499
+ add(yaxes)
500
+ add(frame)
501
+ add(grid)
502
+ add(canvas_color)
503
+ add(axes_color)
504
+ add(ticks_color)
505
+ add(ticks_style)
506
+ add(theme)
507
+
508
+ add(clear_figure)
509
+ add(clear_data)
510
+ add(clear_color)
511
+ add(clear_terminal)
512
+
513
+ add(scatter)
514
+ add(plot)
515
+ add(candlestick)
516
+ add(bar)
517
+ add(simple_bar)
518
+ add(multiple_bar)
519
+ add(simple_multiple_bar)
520
+ add(stacked_bar)
521
+ add(simple_stacked_bar)
522
+ add(simple_bar)
523
+ add(hist)
524
+ add(box)
525
+
526
+ add(error)
527
+ add(event_plot)
528
+ add(vertical_line)
529
+ add(horizontal_line)
530
+ add(text)
531
+ add(rectangle)
532
+ add(polygon)
533
+ add(confusion_matrix)
534
+ add(indicator)
535
+
536
+ add(matrix_plot)
537
+ add(image_plot)
538
+
539
+ add(play_gif)
540
+ add(play_video)
541
+ add(play_youtube)
542
+ add(get_youtube)
543
+
544
+ add(show)
545
+ add(build)
546
+ add(sleep)
547
+ add(time)
548
+ add(save_fig)
549
+ add(from_matplotlib)
550
+
551
+ add(date_form)
552
+ add(set_time0)
553
+ add(today_datetime)
554
+ add(today_string)
555
+ add(datetime_to_string)
556
+ add(datetimes_to_strings)
557
+ add(string_to_datetime)
558
+
559
+ add(script_folder)
560
+ add(parent_folder)
561
+ add(join_paths)
562
+ add(save_text)
563
+ add(read_data)
564
+ add(write_data)
565
+ add(download)
566
+ add(delete_file)
567
+
568
+ add(colorize)
569
+ add(uncolorize)
570
+ add(terminal_size)
571
+ add(terminal_width)
572
+ add(terminal_height)
573
+ add(sin)
574
+ add(square)
575
+ add(transpose)
576
+
577
+ add(colors)
578
+ add(styles)
579
+ add(markers)
580
+ add(themes)
581
+ add(test)
plotext_plus/_date.py ADDED
@@ -0,0 +1,60 @@
1
+ from datetime import datetime as dt
2
+ from datetime import timezone as tz # useful for dates before 1970 in windows
3
+
4
+ class date_class():
5
+
6
+ def __init__(self):
7
+ self.date_form()
8
+ self.time0 = 0
9
+ self.set_time0('01/01/1900')
10
+
11
+ def date_form(self, input_form = None, output_form = None): # it sets the datetime form used for functions that output date string and input date string
12
+ input_form = 'd/m/Y' if input_form is None else input_form
13
+ output_form = input_form if output_form is None else output_form
14
+ self.input_form = self.correct_form(input_form)
15
+ self.output_form = self.correct_form(output_form)
16
+
17
+ def set_time0(self, string, input_form = None): # the origin of time, useful for log scale not to hit the 0 timestamp
18
+ self.time0 = self.string_to_time(string, input_form, 0)
19
+
20
+ def today_datetime(self): # today in datetime form
21
+ return dt.today()
22
+
23
+ def today_string(self, output_form = None): # today in string form
24
+ return self.datetime_to_string(self.today_datetime(), output_form)
25
+
26
+ def datetime_to_string(self, datetime, output_form = None): # from datetime form to string form
27
+ output_form = self.output_form if output_form is None else self.correct_form(output_form)
28
+ return datetime.strftime(output_form)
29
+
30
+ def datetimes_to_strings(self, datetimes, output_form = None): # from datetime form to string form
31
+ return [self.datetime_to_string(el, output_form) for el in datetimes]
32
+
33
+ def string_to_datetime(self, string, input_form = None): # from date and times in string form to standard datetime input_form
34
+ input_form = self.input_form if input_form is None else self.correct_form(input_form)
35
+ return dt.strptime(string, input_form)
36
+
37
+ ##############################################
38
+ ############ Utilities ################
39
+ ##############################################
40
+
41
+ def correct_form(self, date_form):
42
+ return ''.join(['%' + el if el.isalpha() else el for el in date_form])
43
+
44
+ def string_to_time(self, string, input_form = None, time0 = None):
45
+ input_form = self.input_form if input_form is None else self.correct_form(input_form)
46
+ time0 = self.time0 if time0 is None else time0
47
+ try:
48
+ return dt.strptime(string, input_form).replace(tzinfo = tz.utc).timestamp() - time0
49
+ except:
50
+ raise ValueError('Date Form should be: ' + input_form)
51
+
52
+ def strings_to_time(self, strings, input_form = None):
53
+ return [self.string_to_time(el, input_form) for el in strings]
54
+
55
+ def time_to_string(self, time, output_form = None):
56
+ return self.datetime_to_string(dt.fromtimestamp(time + self.time0), output_form)
57
+
58
+ def times_to_string(self, times, input_form = None):
59
+ return [self.time_to_string(el, input_form) for el in times]
60
+