[Python-ideas] SI scale factors in Python
Ivan Levkivskyi
levkivskyi at gmail.com
Sat Aug 27 18:17:20 EDT 2016
On 26 August 2016 at 18:35, Steven D'Aprano <steve at pearwood.info> wrote:
> I think that units are orthogonal to types: I can have a float of unit
> "gram" and a Fraction of unit "gram", and they shouldn't necessarily be
> treated as the same type.
I think you are mixing here what I sometimes call classes (i.e. runtime
implementation)
and types (i.e., static "interface" declaration). In this terms I think
units are types.
But probably it is a more philosophical question and could be a matter of
taste.
On 27 August 2016 at 15:04, Stephen J. Turnbull <
turnbull.stephen.fw at u.tsukuba.ac.jp> wrote:
> def power(potential, current):
> return WattType(float(Volt)*float(Ampere))
One don't need to call float on NewTypes derived from it, they will be cast
"automatically", so that:
def power(I, V):
return WattType(I*V)
should be sufficient. Concerning the speed vs. flexibility issue, one could
use stub files:
# content of units.py
def WattType(x): return x
#etc.
# contents of units.pyi
class WattType:
def __init__(self, x: float) -> None:
...
def __mul__(self, other: float) -> WattType:
# over 9000 of complicated overloads and stuff
In such way units will be very fast at runtime but will be thoroughly
checked by static type checkers.
As I understand there are two separate parts of the proposal:
1) suffixes like micro, kilo, etc. -- but Guido does not like this idea yet
2) physical units -- this part I think could be 99% percent solved by PEP
484 and PEP 526
(it is not 100% because this will require dependent types).
--
Ivan
On 27 August 2016 at 22:22, Chris Angelico <rosuav at gmail.com> wrote:
> On Sun, Aug 28, 2016 at 4:25 AM, Steven D'Aprano <steve at pearwood.info>
> wrote:
> >
> > Sympy (apparently) doesn't warn you if your units are incompatible, it
> > just treats them as separate terms in an expression:
> >
> > py> 2*m + 3*K
> > 3*K + 2*m
> >
> > which probably makes sense from the point of view of a computer algebra
> > system (adding two metres and three degrees Kelvin is no weirder than
> > adding x and y). But from a unit conversion point of view, I think
> > sympy is the wrong solution.
>
> As a generic tool, I would say this is correct. It keeps things simple
> and straight-forward. Worst case, you see a strange result at the end,
> rather than getting an instant exception; in fact, it's very similar
> to NaN, in that some operations might cancel out the "error" status.
>
> ChrisA
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20160828/8fd51015/attachment-0001.html>
More information about the Python-ideas
mailing list