Le module siunit

C’est une classe numérique qui gére les grandeur physique avec les unités SI.
Par exemple 5 kilos + 3 g = 5,003 kg, mais 5 kilos + 3 volts n’a aucun sens.
Ca tourne donc autour de l’analyse dimensionnelle.

Les sources sont aux bout de ce lien

Exemple

Ci-dessous, on crée une hauteur, une masse et une gravitée.
Puis, on multiplie les 3 (formule de l’énergie potentielle)
Le résultat est une énergie exprimée en m2.kg.s-2. Cette unité correspond aux joules.
On essaie ensuite d’additionner la masse et la hauteur. Cela, évidemment, crée une exception.

>>> hauteur = 2*m
>>> masse = 3*kg
>>> print (f"hauteur = {hauteur}, masse = {masse}")
hauteur = 2 m, masse = 3 kg
>>> g = 9.81*m/s/s
>>> energie_potentielle = hauteur*masse*g
>>> print(energie_potentielle)
58.86 m².kg.s⁻²
>>> absurde = hauteur + masse   #TypeError exception
Traceback (most recent call last):
  File "", line 1, in 
    absurde = hauteur + masse   #TypeError exception
  File "D:\code\python-libs\dimentional-analysis\siunit.py", line 73, in __add__
    raise TypeError("Cannot add units " + unit_to_str(self.unit) +
TypeError: Cannot add units m and kg
>>> 

Plus en détail

Ce module contient la classe numérique immutable Dnumber (pour « denominated number », grandeur physique en Anglais) dérivé de la classe virtuelle Real.
Les valeur utilisées dans l’exemple ci-dessus sont toutes des instances de Dnumber. Y compris m, kg ou s qui sont prédéfinis dans le module.
Scrollez tout a la fin du code pour voir toutes les unités ainsi definies.

On peut faire l’essentiel des opérations courantes pourvues qu’elle aient du sens du point de vu de la physique.
Opérations définies: +, -, *, /, abs(),==, !=, //, %, <, <=, >, >=, float, math.trunc(), round(), math.floor(), math.ceil(), divmod() et quelques autres.

J’ai aussi défini beaucoup de sous unités. On peut donc faire ceci:

>>> longueur = 30 * cm
>>> longueur += 2*inch
>>> print (longueur)
0.3508 m
>>> print (3*longueur)
1.0524 m
>>>

Par contre longueur + 3 ne marche pas puisque le premier nombre a une unité et pas le second

Ce module fonctionne assez bien en conjonction avec le module Vector2D

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.