lunes, 3 de noviembre de 2025

Pint, una librería para manejo de cantidades físicas en Python

 Fuente: https://pint.readthedocs.io/en/stable/getting/overview.html

¿Qué es una pinta? 

Pint es un paquete de Python para definir, operar y manipular magnitudes físicas : el producto de un valor numérico y una unidad de medida. Permite realizar operaciones aritméticas entre ellas y conversiones desde y hacia diferentes unidades.

Se distribuye con una lista completa de unidades físicas, prefijos y constantes . Gracias a su diseño modular, puedes ampliar (¡o incluso reescribir!) la lista completa sin modificar el código fuente. Admite numerosas operaciones matemáticas de NumPy sin necesidad de modificar ni encapsular NumPy .

Cuenta con una cobertura de pruebas completa. Se ejecuta en Python 3.9+ sin dependencias adicionales. Se distribuye bajo una licencia BSD de 3 cláusulas .

Es extremadamente fácil y natural de usar:

import pint
ureg = pint.UnitRegistry()
3 * ureg.meter + 4 * ureg.cm
<Quantity(3.04, 'meter')>

y puedes hacer un buen uso de NumPy si quieres:

import numpy as np
[3, 4] * ureg.meter + [4, 3] * ureg.cm
<Quantity([ 3.04  4.03], 'meter')>
np.sum(_)
<Quantity(7.07, 'meter')>

Consulta el tutorial para obtener más ayuda para empezar.

Principios de diseño 

Aunque ya existen algunos paquetes de Python muy buenos para manejar cantidades físicas, ninguno se ajustaba realmente a mis necesidades. Como la mayoría de los desarrolladores, programé Pint para solucionar mis propios problemas.

Análisis de unidades : Pint reconoce las formas prefijadas y pluralizadas de las unidades sin necesidad de definirlas explícitamente. En otras palabras: dado que se definen el prefijo kilo y la unidad metro , Pint entiende kilómetros . Esto da como resultado una lista de definiciones de unidades mucho más corta y fácil de mantener en comparación con otros paquetes.

Definiciones de unidades independientes : las definiciones de las unidades se cargan desde un archivo de texto sencillo y fácil de editar. Añadir o modificar unidades y sus definiciones no requiere modificar el código.

Formato avanzado de cadenas : se puede formatear una cantidad como cadena usando la sintaxis PEP 3101. Se proporcionan opciones de conversión extendidas para ofrecer formato simbólico, LaTeX y un formato legible. La traducción de nombres de unidades está disponible si Babel está instalado.

Libre elección del tipo numérico : Puede usar cualquier tipo numérico ( fractionfloatdecimalnumpy.ndarray, etc.). NumPy no es obligatorio, pero es compatible.

Excelente integración con NumPy : Al usar un ndarray de NumPy , se admiten sus métodos y ufuncs, incluyendo la conversión automática de unidades. Por ejemplo , numpy.arccos(q)si se requiere un valor adimensional q, las unidades de la cantidad de salida serán radianes.

Integración de incertidumbres : maneja de forma transparente los cálculos con cantidades con incertidumbres (como 3,14±0,01) metros a través del paquete de incertidumbres .

Manejo de temperatura : conversión entre unidades con diferentes puntos de referencia, como posiciones en un mapa o escalas de temperatura absolutas.

Sin dependencias : solo depende de Python y su biblioteca estándar. Interactúa con otros paquetes como NumPy, pero no se sabe con certeza si están instalados.

Integración con Pandas : El paquete pint-pandas permite usar Pint con Pandas. Las operaciones con DataFrames y entre columnas tienen en cuenta las unidades, lo que ofrece mayor comodidad a los usuarios de DataFrames de Pandas. Para obtener más información, consulte el cuaderno Jupyter de pint-pandas .

Al usar un ndarray de NumPy , se admiten sus métodos y ufuncs, incluida la conversión automática de unidades. Por ejemplo, numpy.arccos(q)se requerirá un valor adimensional qy las unidades de la cantidad de salida serán radianes.

Una última cosa 

La Oficina de Inteligencia Militar (MIB) de la Misión de Operaciones Especiales (MCO) determinó que la causa principal de la pérdida de la nave espacial MCO fue el error en el uso de unidades métricas en la codificación del archivo de software terrestre «Fuerzas Pequeñas», utilizado en los modelos de trayectoria. Específicamente, en el código de la aplicación de software SM_FORCES (fuerzas pequeñas) se utilizaron datos de rendimiento de los propulsores en unidades inglesas en lugar de unidades métricas. La salida del código de la aplicación SM_FORCES, según lo requerido por la Especificación de Interfaz de Software (SIS) del Proyecto MSOP, debía estar en unidades métricas de Newton-segundo (Ns). En cambio, los datos se reportaron en unidades inglesas de libra-segundo (lbf-s). El archivo de Desaturación del Momento Angular (AMD) contenía los datos de salida del software SM_FORCES. La SIS, que no se siguió, define tanto el formato como las unidades del archivo AMD generado por las computadoras terrestres. Por consiguiente, el procesamiento posterior de los datos del archivo AMD por el algoritmo del software de navegación subestimó el efecto en la trayectoria de la nave espacial por un factor de 4,45, que es el factor de conversión necesario de la fuerza en libras a newtons. Utilizando estos datos incorrectos, se calculó una trayectoria errónea.


  de licencia

Copyright (c) 2012 by Hernan E. Grecco and contributors.  See AUTHORS
for more details.

Some rights reserved.

Redistribution and use in source and binary forms of the software as well
as documentation, with or without modification, are permitted provided
that the following conditions are met:

* Redistributions of source code must retain the above copyright
  notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above
  copyright notice, this list of conditions and the following
  disclaimer in the documentation and/or other materials provided
  with the distribution.

* The names of the contributors may not be used to endorse or
  promote products derived from this software without specific
  prior written permission.

THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND
CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
DAMAGE.

No hay comentarios.:

Publicar un comentario

Entradas recientes

Lifelines o líneas de vidas en Python

  Inicio rápido ¶ Instalación ¶ Instalar mediante  pip : pip install lifelines O Instalar mediante  conda  : conda install -c conda-forge l...

Entradas Populares