Unable to decorate a class method using Pint units
<p>Here's a very simple example in an effort to decorate a class method using Pint,</p>

<pre><code>from pint import UnitRegistry

ureg = UnitRegistry()
Q_ = ureg.Quantity

class Simple:
    def __init__(self):
    pass

@ureg.wraps('m/s', (None, 'm/s'), True)
def calculate(self, a, b):
    return a*b

if __name__ == "__main__":
    c = Simple().calculate(1, Q_(10, 'm/s'))
    print c
</code></pre>

<p>This code results in the below ValueError.</p>

<pre><code>Traceback (most recent call last):
   c = Simple().calculate(1, Q_(10, 'm/s'))
   File "build/bdist.macosx-10.11-intel/egg/pint/registry_helpers.py",   line 167, in wrapper
   File "build/bdist.macosx-10.11-intel/egg/pint/registry_helpers.py", line 118, in _converter
   ValueError: A wrapped function using strict=True requires quantity for all arguments with not None units. (error found for m / s, 1)
</code></pre>

<p>It seems to me that the issue here may be with class instances being passed to the pint decorator. Would anyone have a solution for fixing this?</p>

<p>I think the error message is pretty clear. <a href="https://pint.readthedocs.io/en/0.7.2/wrapping.html#strict-mode" rel="nofollow">In strict mode all arguments have to be given as <code>Quantity</code></a>
yet you only give the second argument as such.</p>

<p>You either give the first argument as a <code>Quantity</code> too</p>

<pre><code>if __name__ == "__main__":
    c = Simple().calculate(Q_(1, 'm/s'), Q_(10, 'm/s'))
    print c
</code></pre>

<p>or you disable strict mode, which I believe is what you are looking for.</p>

<pre><code>    ...
    @ureg.wraps('m/s', (None, 'm/s'), False)
    def calculate(self, a, b):
        return a*b

if __name__ == "__main__":
    c = Simple().calculate(1, Q_(10, 'm/s'))
    print c
</code></pre>

python pint