diff --git a/LabIFSC/__init__.py b/LabIFSC/__init__.py index f634103..86bae44 100644 --- a/LabIFSC/__init__.py +++ b/LabIFSC/__init__.py @@ -4,7 +4,7 @@ __author__ = "Gabriel Queiroz" __credits__ = ["gabriel Queiroz", "Pedro Ilídio"] __license__ = "MIT" -__version__ = "0.1.9" +__version__ = "0.1.10" __email__ = "gabrieljvnq@gmail.com" __status__ = "Production" diff --git a/LabIFSC/geral.py b/LabIFSC/geral.py index 41154ec..8dbfcb0 100644 --- a/LabIFSC/geral.py +++ b/LabIFSC/geral.py @@ -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 diff --git a/LabIFSC/lista_de_unidades.py b/LabIFSC/lista_de_unidades.py index 413aba7..bbfc8db 100755 --- a/LabIFSC/lista_de_unidades.py +++ b/LabIFSC/lista_de_unidades.py @@ -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)) diff --git a/LabIFSC/medida.py b/LabIFSC/medida.py index 4f6e564..9b42fc7 100755 --- a/LabIFSC/medida.py +++ b/LabIFSC/medida.py @@ -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 @@ -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: @@ -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: @@ -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}}}" diff --git a/tests/unidades_test.py b/tests/unidades_test.py index ee86be7..2c5e8da 100644 --- a/tests/unidades_test.py +++ b/tests/unidades_test.py @@ -24,4 +24,15 @@ def test_unidade_3(): m1 = Medida(0.3049, "m") m2 = Medida(1, "ft") assert m1 != m2 - assert not m1 == m2 \ No newline at end of file + 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" \ No newline at end of file