diff options
Diffstat (limited to 'pint/pint_eval.py')
-rw-r--r-- | pint/pint_eval.py | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/pint/pint_eval.py b/pint/pint_eval.py index 130e641..0d16c63 100644 --- a/pint/pint_eval.py +++ b/pint/pint_eval.py @@ -25,8 +25,24 @@ _OP_PRIORITY = { "-": 0, } + +def _power(left, right): + from .compat import is_duck_array + from .quantity import Quantity + + if ( + isinstance(left, Quantity) + and is_duck_array(left.magnitude) + and left.dtype.kind not in "cf" + and right < 0 + ): + left = left.astype(float) + + return operator.pow(left, right) + + _BINARY_OPERATOR_MAP = { - "**": operator.pow, + "**": _power, "*": operator.mul, "": operator.mul, # operator for implicit ops "/": operator.truediv, |