-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstep_0.py
122 lines (106 loc) · 3.39 KB
/
step_0.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# ruff: noqa: E741
'''módulo step_0
Valores e funções necessários para fazer os cáculos do passo 1 em diante.
'''
__all__ = [
's_callable', 'mu_callable', 'sigma_callable',
's_array', 'mu_list', 'sigma_list',
]
__author__ = 'Alexandre Pierre'
__email__ = 'alexandrempierre [at] gmail [dot] com'
from collections.abc import Callable
#
import numpy as np
import numpy.typing as npt
def s_callable(k: int, start_idx: int = 0) -> 'Callable[[int], int]':
'''função para gerar o procedimento que vai calcular os valores de s'''
def s_inner(i: int) -> int:
'''calcula o valor de s'''
return (i - start_idx)*2*k
return s_inner
def s_array(n: int, k: int, start_idx: int = 0) -> npt.NDArray[np.int64]:
# pylint: disable=invalid-name
'''array de valores de s'''
return np.array(
[
(i - start_idx)*2*k
for i in range(start_idx, n // (2*k) + start_idx)
],
dtype=np.int64
)
def mu_callable(
xs: npt.NDArray[np.float64],
k: int,
start_idx: int = 0,
) -> 'Callable[[int, int], float]':
# pylint: disable=invalid-name
'''função para gerar o procedimento que vai calcular os valores de mu
(translação)'''
def mu_inner(j: int, i: int) -> float:
'''calcula o valor de mu (translação)'''
idx = (
(i - start_idx)*k*2**(j + 1 - start_idx),
(i + 1 - start_idx)*k*2**(j + 1 - start_idx) - 1
)
return (xs[idx[0]] + xs[idx[1]]) / 2
return mu_inner
def mu_list(
xs: npt.NDArray[np.float64],
k: int,
start_idx: int = 0,
) -> 'list[list[float]]':
# pylint: disable=invalid-name
'''lista de valores de mu (translação)'''
n = len(xs)
l = int(np.log2(n // k)) # noqa: E741
mu = []
for row, j in enumerate(range(start_idx, l + start_idx)):
mu.append([])
for i in range(
start_idx,
n // (k*2**(j + 1 - start_idx)) + start_idx
):
idx = (
(i - start_idx)*k*2**(j + 1 - start_idx),
(i + 1 - start_idx)*k*2**(j + 1 - start_idx) - 1
)
mu[row].append((xs[idx[0]] + xs[idx[1]]) / 2)
return mu
def sigma_callable(
xs: npt.NDArray[np.float64],
k: int,
start_idx: int = 0,
) -> 'Callable[[int, int], float]':
# pylint: disable=invalid-name
'''função para gerar o procedimento que vai calcular os valores de sigma
(dilatação)'''
def sigma_inner(j: int, i: int) -> float:
'''calcula o valor de sigma (dilatação)'''
idx = (
(i - start_idx)*k*2**(j + 1 - start_idx),
(i + 1 - start_idx)*k*2**(j + 1 - start_idx) - 1
)
return (xs[idx[1]] - xs[idx[0]]) / 2
return sigma_inner
def sigma_list(
xs: np.ndarray,
k: int,
start_idx: int = 0,
) -> 'list[list[np.ndarray]]':
# pylint: disable=invalid-name
'''lista de valores de sigma (dilatação)'''
n = len(xs)
l = int(np.log2(n // k))
sigma = []
for row, j in enumerate(range(start_idx, l + start_idx)):
sigma.append([])
for i in range(
start_idx,
n // (k*2**(j + 1 - start_idx)) + start_idx
):
idx = (
(i - start_idx)*k*2**(j + 1 - start_idx),
(i + 1 - start_idx)*k*2**(j + 1 - start_idx) - 1
)
sigma[row].append((xs[idx[1]] - xs[idx[0]]) / 2)
return sigma