Skip to main content

Pequeña librería para trabajar con propagación de errores

Project description

PyIncert

Pequeña librería para trabajar con propagación de errores.

Instalación

PyIncert se puede instalar directamente desde PyPI usando pip:

python3 -m pip install pyincert

Uso

En PyIncert se trabaja con los objetos V que representan una tupla de un valor y su error. Los cálculos matemáticos se harán con estos objetos mayoritariamente en reemplazo de las clases numéricas primitivas de Python (int y float). El formato para crear un objeto V es simplemente V(Valor, Error). Las operaciones disponibles actualmente son: adición, sustracción, multiplicación, divisón, y potenciación. Todas estas se realizan con los operadores nativos de Python correspondientes a cada operación.

from pyincert import V

voltaje = V(12, 1.3) # 12V ± 1.3
resistencia = V(4.3e3, 16) # 4.3e3Ω ± 16

# Operamos normalmente
corriente = voltaje / resistencia
print(corriente) # 0.0028 ± 0.0003

# Otro ejemplo
potencia = V(10e3, 24) * V(2.8e-3, 3e-4) ** 2
print(potencia) # 0.0784 ± 0.0168

En caso de operar con un valor sin error asociado, se puede omitir el uso del objeto V y trabajar directamente con el literal, es decir:

V(3, 0) * V(12, 0.1) == V(3) * V(12, 0.1) == 3 * V(12, 0.1) == V(12, 0.1) * 3

Nótese que PyIncert toma en cuenta la correlación entre variables al momento de calcular.

from pyincert import V

x = V(3.14, 1) # 3.14 ± 1
y = V(3.14, 1)

print(x / x) # 1.0 ± 0.0
print(x / y) # 1.0 ± 0.4504

print(x * x) # 9.8596 ± 6.28
print(x * y) # 9.8596 ± 4.4406

Errores Relativos

PyIncert también incluye la clase ER que representa un error relativo. Con este objeto podemos trabajar con valores del tipo V ± E%. Esta puede ser usada creando una instancia de la misma u operando el valor de error con una instancia ya creada usando el operador módulo (%). Para esta última opción, PyIncert ya incluye una instancia de ER llamada er.

from pyincert import V, ER, er

r1 = V(3.3e4, ER(5)) # 3.3e4 ± 5%

# De forma equivalente (y preferible)
r2 = V(3.3e4, 5%er)
print(r2) # 33000.0 ± 1650.0

# Algunas personas me han comentado que han hecho esto:
_ = er # Así queda más limpio visualmente el error relativo
r3 = V(3.3e4, 5%_)

Funciones Matemáticas

PyIncert incluye un pequeño sub-módulo con algunas funciones matemáticas hechas para trabajar con objetos V. Estas devuelven un nuevo objeto V con el valor evaluado y el error propagado por la función.

from pyincert import V
from pyincert.math import sin, radians

theta = V(180, 1) # 180° ± 1
theta_rad = radians(theta)

print(sin(theta_rad)) # 0.0 ± 0.0175

Representación

La representación de un objeto V es Valor ± Error y por defecto redondea ambos valores a los primeros 4 decimales. Esto es meramente por temas estéticos, pues la aproximación no se usa al calcular. De todas formas, es posible cambiar la cantidad de decimales mostrados usando el método de clase cant_dec de V. En caso de que la consola no soporte Unicode se puede llamar al método de clase use_unicode con el argumento False para que la representación sea Valor +/- Error.

from pyincert import V, er
import math

a = V(math.pi, 23%er) # π ± 23%
print(a) # 3.1416 ± 0.7226

V.cant_dec(10) # Ahora la representación redondea los valores a los primeros 10 decimales
V.use_unicode(False) # Ahora se usará "+/-" en vez de "±"

print(a) # 3.1415926536 +/- 0.7225663103

Licencia

La librería PyIncert se encuentra publicada bajo la licencia GPLv3. Para más información, favor referirse al archivo de Licencia

Copyleft (C) 2021 Mateo Contenla

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyincert-1.0.0.tar.gz (6.6 kB view hashes)

Uploaded Source

Built Distribution

pyincert-1.0.0-py3-none-any.whl (19.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page