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