Skip to content

Commit d0ff77d

Browse files
fix: type checker
attribute only known at run time
1 parent 5a6d475 commit d0ff77d

File tree

2 files changed

+18
-21
lines changed

2 files changed

+18
-21
lines changed

LabIFSC2/_regressoes.py

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import string
22
from abc import ABC, abstractmethod
3-
from collections.abc import Callable, Iterator
3+
from collections.abc import Callable, Iterator,Iterable
44
from numbers import Real
55
from typing import Any
66

@@ -33,8 +33,8 @@ def _aplicar_funcao_sem_passar_pelo_sistema_de_unidades(
3333
medidas_novas.append(Medida(nominal,unidade,incerteza))
3434
return np.array(medidas_novas)
3535

36-
def _forcar_troca_de_unidade(array_medidas:np.ndarray,unidade:str)-> np.ndarray:
37-
return np.array([Medida(med._nominal.magnitude,unidade,med._incerteza.magnitude,) for med in array_medidas])
36+
def _forcar_troca_de_unidade(medidas:Iterable[Medida],unidade:str)-> np.ndarray:
37+
return np.array([Medida(med._nominal.magnitude,unidade,med._incerteza.magnitude,) for med in medidas])
3838

3939
class Regressao(ABC):
4040

@@ -70,17 +70,16 @@ def __iter__(self)->Iterator[object]:
7070

7171
class MPolinomio(Regressao):
7272

73-
def __init__(self,coeficientes:np.ndarray):
73+
def __init__(self,coeficientes:Iterable[Medida]):
7474
super().__init__()
75-
if not (isinstance(coeficientes[0],Medida)):
76-
raise TypeError('Os valores do array não são Medidas')
77-
78-
self._coeficientes:list[Medida]=[]
79-
for index,coef in enumerate(coeficientes):
80-
self._coeficientes.append(coef)
81-
setattr(self,string.ascii_lowercase[index],coef)
82-
self.grau=len(coeficientes)-1
83-
75+
self._coeficientes:list[Medida]=[coef for coef in coeficientes]
76+
self.grau=len(self._coeficientes)-1
77+
def __getattr__(self,name:str)-> Medida:
78+
if name in string.ascii_lowercase:
79+
index=string.ascii_lowercase.index(name)
80+
if index<=self.grau:
81+
return self._coeficientes[index]
82+
raise AttributeError(f"'MPolinomio' object has no attribute '{name}'")
8483

8584
def amostrar(self:'MPolinomio', x:np.ndarray,unidade_y:str) -> np.ndarray:
8685
"""
@@ -259,10 +258,10 @@ def regressao_exponencial(x_medidas:np.ndarray,y_medidas:np.ndarray,
259258
pegar_log=lambda x: log(x)/log(float(base))
260259
log_y_medidas=_aplicar_funcao_sem_passar_pelo_sistema_de_unidades(y_medidas,pegar_log)
261260
polinomio=regressao_linear(x_medidas,log_y_medidas)
262-
k=polinomio.a
261+
k_coef=polinomio.a
263262
a=_aplicar_funcao_sem_passar_pelo_sistema_de_unidades(np.array([polinomio.b]),exp)[0]
264-
k=_forcar_troca_de_unidade(np.array([k]),str((1/x_medidas[0]._nominal).units))
265-
a=_forcar_troca_de_unidade(np.array([a]),str(y_medidas[0]._nominal.units))
263+
k=_forcar_troca_de_unidade([k_coef],str((1/x_medidas[0]._nominal).units))
264+
a=_forcar_troca_de_unidade([a],str(y_medidas[0]._nominal.units))
266265
return MExponencial(a[0],k[0],base)
267266

268267

@@ -291,7 +290,7 @@ def regressao_potencia(x_medidas:np.ndarray, y_medidas:np.ndarray) -> MLeiDePote
291290
log_x_medidas=_aplicar_funcao_sem_passar_pelo_sistema_de_unidades(x_medidas,log)
292291
polinomio=regressao_linear(log_x_medidas,log_y_medidas)
293292
a=_aplicar_funcao_sem_passar_pelo_sistema_de_unidades(np.array([polinomio.b]),exp)[0]
294-
n=polinomio.a
295-
a=_forcar_troca_de_unidade(np.array([a]),str((y_medidas[0]._nominal/x_medidas[0]._nominal**n._nominal.magnitude).units))
296-
n=_forcar_troca_de_unidade(np.array([n]),"dimensionless")
293+
n_coef=polinomio.a
294+
a=_forcar_troca_de_unidade(np.array([a]),str((y_medidas[0]._nominal/x_medidas[0]._nominal**n_coef._nominal.magnitude).units))
295+
n=_forcar_troca_de_unidade([n_coef],"dimensionless")
297296
return MLeiDePotencia(a[0],n[0],y_medidas[0]._nominal)

tests/test_classe_para_regressoes.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66

77
def test_initialization():
88
coeficientes = lab.linspaceM(1,3,3,'',0)
9-
with pytest.raises(TypeError):
10-
lab._regressoes.MPolinomio(np.array([1, 2, 3]))
119
polinomio=lab._regressoes.MPolinomio(coeficientes)
1210
assert polinomio.grau == 2
1311
assert polinomio.a.nominal("") == 1

0 commit comments

Comments
 (0)