Skip to content

Commit

Permalink
Adicionado: Medida.unidade() e melhorias na conversão para SI.
Browse files Browse the repository at this point in the history
  • Loading branch information
gjvnq committed Apr 9, 2019
1 parent 76a64e4 commit 268b9d2
Show file tree
Hide file tree
Showing 5 changed files with 33 additions and 22 deletions.
2 changes: 1 addition & 1 deletion LabIFSC/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
__author__ = "Gabriel Queiroz"
__credits__ = ["gabriel Queiroz", "Pedro Ilídio"]
__license__ = "MIT"
__version__ = "0.1.9"
__version__ = "0.1.10"
__email__ = "[email protected]"
__status__ = "Production"

Expand Down
2 changes: 1 addition & 1 deletion LabIFSC/geral.py
Original file line number Diff line number Diff line change
Expand Up @@ -532,7 +532,7 @@ def unidades_em_texto(unidades, sep=" ", estilo=""):
elif estilo == "siunitx":
if per == False and unidade.expoente_pai < 0:
per = True
txt += "\per"
txt += "\\per"
txt += unidade.simbolo_siunitx
else:
txt += unidade.simbolo
Expand Down
6 changes: 3 additions & 3 deletions LabIFSC/lista_de_unidades.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,13 +156,13 @@ def registra_unidades():
Unidade("Coulomb metro", "C·m", "C\\cdot{}m", "I1T2L1", Medida(1), Medida(0))

# Potencial elétrico
Unidade("Volt", "V", "V", "ML2A-1T-3", Medida(1), Medida(0))
Unidade("Volt", "V", "V", "ML2I-1T-3", Medida(1), Medida(0))

# Resistência elétrica
Unidade("Ohm", "Ω", "\\ohm", "M1L2A-2T-3", Medida(1), Medida(0))
Unidade("Ohm", "Ω", "\\ohm", "M1L2I-2T-3", Medida(1), Medida(0))

# Capacitância
Unidade("Farad", "F", "F", "A2T4M-1L-2", Medida(1), Medida(0))
Unidade("Farad", "F", "F", "I2T4M-1L-2", Medida(1), Medida(0))

# Temperature
Unidade("Kelvin", "K", "K", "K", Medida(1), Medida(0))
Expand Down
32 changes: 16 additions & 16 deletions LabIFSC/medida.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,8 @@
from copy import copy
from .geral import TODAS_AS_UNIDADES, acha_unidade, calcula_dimensao, analisa_numero, dimensao_em_texto, fator_de_conversao_para_si, unidades_em_texto, converte_unidades, analisa_unidades, simplifica_unidades, gera_expoente, adimensional, get_unidades

def M(val, incerteza = None, unidade = None):
# Talvez seja uma lista de números para converter
if isinstance(val, list):
ret = []
for x in val:
try:
ret.append(Medida((x, incerteza), unidade=unidade))
except:
ret.append(Medida(x, unidade=unidade))
return ret
# Tente o de sempre
try:
return Medida((val, incerteza), unidade=unidade)
except:
return Medida(val, unidade=unidade)
def M(*args, **kwargs):
return Medida(*args, **kwargs)

class Medida:
unidades_originais = [] # Tuplas (objeto unidade, expoente) na ordem em que foram entradas
Expand Down Expand Up @@ -71,6 +58,16 @@ def SI(self):
# Gere as unidades
global TODAS_AS_UNIDADES
m.unidades_originais = []

# Casos especiais
casos_especiais = ["joule", "newton", "pascal", "watt", "coulomb", "ohm", "farad"]
for caso_especial in casos_especiais:
u = TODAS_AS_UNIDADES[caso_especial]
if self.dimensao == u.dimensao:
m.unidades_originais.append(u)
return m

# Caso padrão
if self.dimensao[0] != 0:
m.unidades_originais.append(TODAS_AS_UNIDADES['metro'].nova_unidade_por_expoente(self.dimensao[0]))
if self.dimensao[1] != 0:
Expand All @@ -88,6 +85,9 @@ def SI(self):

return m

def unidade(self, separador=" ", estilo=""):
return unidades_em_texto(self.unidades_originais, separador, estilo)

def checa_dim(self, outro):
# Aplique a regra
if self.dimensao != outro.dimensao:
Expand Down Expand Up @@ -327,7 +327,7 @@ def __format__(self, fmt):
if modo == "latex":
uni = unidades_em_texto(self.unidades_originais, estilo="latex")
base = "{nom}\\pm{err}\\textrm{{ {uni}}}"
base_exp = "({nom}\\pm{err})\cdot10^{{{expn}}}\\textrm{{ {uni}}}"
base_exp = "({nom}\\pm{err})\\cdot10^{{{expn}}}\\textrm{{ {uni}}}"
elif modo == "siunitx":
uni = unidades_em_texto(self.unidades_originais, estilo="siunitx")
base = "\\SI{{{nom}+-{err}}}{{{uni}}}"
Expand Down
13 changes: 12 additions & 1 deletion tests/unidades_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,15 @@ def test_unidade_3():
m1 = Medida(0.3049, "m")
m2 = Medida(1, "ft")
assert m1 != m2
assert not m1 == m2
assert not m1 == m2
assert m1.unidade() == "m"
assert m2.unidade() == "ft"
assert m2.SI().unidade() == "m"

def test_unidade_4():
m1 = Medida(1, "C V")
m2 = Medida(1, "J")
assert m1 == m2
assert not m1 != m2
assert m1.unidade().__str__() == "C V"
assert m1.SI().unidade().__str__() == "J"

0 comments on commit 268b9d2

Please sign in to comment.