-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.py
98 lines (90 loc) · 4.13 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
from dates import days_range, Day, where, lower_or_equal, greater
def add9(dates: list[Day], data: list[int]) -> tuple[list[Day], list[int]]:
days_0 = days_range(dates[0], dates[-1])
for i in range(0, len(days_0)):
if days_0[i].day != dates[i].day:
data.insert(i, 999999999999999)
dates.insert(i, Day(*days_0[i].splitted))
return dates, data
def interpolate_9(list_0: list[int]) -> list[int]:
nines = 999999999999999
boolean_0 = False
boolean_1 = False
count = 0
for index, object in enumerate(list_0):
if object == 999999999999999:
if not boolean_0:
nines = index-1
boolean_0 = True
if index == len(list_0)-1:
if count == 0:
count = list_0[nines] - list_0[nines - 1]
for number in range(nines+1, index+1):
list_0[number] = list_0[number - 1] + list_0[number - 1] - list_0[number - 2]
boolean_0 = False
boolean_1 = False
if boolean_0 and object != 999999999999999:
boolean_1 = True
if boolean_1:
count = list_0[index] - list_0[nines]
f = count / (index - nines)
for number in range(nines + 1, index):
list_0[number] = list_0[nines] + int(f * (number - nines))
boolean_0 = False
boolean_1 = False
return list_0
def join_dates_values(dates_0: list[Day], dates_1: list[Day], values_0: list[int], values_1: list[int]) -> tuple[list[Day], list[int]]:
united_dates = []
united_values = []
dates_0_with_nines = add9(dates_0, values_0)
dates_1_with_nines = add9(dates_1, values_1)
dates_0 = dates_0_with_nines[0]
values_0 = interpolate_9(dates_0_with_nines[1])
dates_1 = dates_1_with_nines[0]
values_1 = interpolate_9(dates_1_with_nines[1])
if lower_or_equal(dates_0[0], dates_1[0]) & lower_or_equal(dates_1[0], dates_0[-1]) & lower_or_equal(dates_0[-1], dates_1[-1]):
united_dates = days_range(dates_0[0], dates_1[-1])
i = where(dates_1[0], dates_0)
united_values = values_0[:i] + values_1
elif lower_or_equal(dates_1[0], dates_0[0]) & lower_or_equal(dates_0[0], dates_1[-1]) & lower_or_equal(dates_1[-1], dates_0[-1]):
united_dates = days_range(dates_1[0], dates_0[-1])
i = where(dates_0[0], dates_1)
united_values = values_1[:i] + values_0
elif greater(dates_1[-1], dates_0[0]):
united_dates = days_range(dates_0[0], dates_1[-1])
united_values = values_0 + values_1
for i in range(0, len(united_dates) - len(united_values)):
united_values.insert(len(values_0) + i, 999999999999999)
united_values = interpolate_9(united_values)
elif greater(dates_0[-1], dates_1[0]):
united_dates = days_range(dates_1[0], dates_0[-1])
united_values = values_1 + values_0
for i in range(0, len(united_dates) - len(united_values)):
united_values.insert(len(values_0) + i, 999999999999999)
united_values = interpolate_9(united_values)
return united_dates, united_values
def fix_value(value: str) -> int:
if '--\n' in value:
value = value[3:]
if 'K' in value:
if '.' in value:
if len(value) == 4:
value = value.replace('.', '').replace('K', '00')
elif '.' in value[1] and len(value) == 5:
value = value.replace('.', '').replace('K', '0')
elif '.' in value[2] and len(value) == 5:
value = value.replace('.', '').replace('K', '00')
else:
value = value.replace('.', '').replace('K', '000')
if 'M' in value:
if '.' in value:
if value[2] == '.':
value = value.replace('.', '').replace('M', '00000')
elif value[1] == '.':
if len(value) == 5:
value = value.replace('.', '').replace('M', '0000')
elif len(value) == 4:
value = value.replace('.', '').replace('M', '00000')
else:
value = value.replace('M', '000000')
return int(value)