summaryrefslogtreecommitdiff
path: root/pint/pint_eval.py
diff options
context:
space:
mode:
authorKeewis <keewis@posteo.de>2021-04-27 14:24:02 +0200
committerKeewis <keewis@posteo.de>2021-04-27 14:24:02 +0200
commit0da0149c7dca7d683179709e84a7855a19199b5d (patch)
tree754600927c21b317bd050d5c0706325681e90f81 /pint/pint_eval.py
parent98a8f6ac5ab879661cc1299fb2cd39d40a609349 (diff)
downloadpint-0da0149c7dca7d683179709e84a7855a19199b5d.tar.gz
override operator.power for negative exponents
Diffstat (limited to 'pint/pint_eval.py')
-rw-r--r--pint/pint_eval.py18
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,