Repository navigation
Conversation
Evaluate PowExpr values with C's pow function and raise ZeroDivisionError for zero raised to a negative exponent. Add regression coverage for negative exponents and division by zero.
There was a problem hiding this comment.
Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.
An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing.
PowExpr._evaluate via the C-level API
Rename the evaluated operand from `val` to `base` in `PowExpr._evaluate` for clearer naming.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #1278 +/- ##
==========================================
+ Coverage 57.91% 58.08% +0.17%
==========================================
Files 26 27 +1
Lines 5807 6029 +222
==========================================
+ Hits 3363 3502 +139
- Misses 2444 2527 +83 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
| m.getVal(sin(math.inf)) | ||
|
|
||
|
|
||
| def test_getVal_pow_negative_exponent(): |
There was a problem hiding this comment.
This test is in the middle of another test
| return (<GenExpr>self.children[0])._evaluate(sol) ** self.expo | ||
| cdef double base = (<GenExpr>self.children[0])._evaluate(sol) | ||
| cdef double expo = <double>self.expo | ||
| if base == 0.0 and expo < 0: |
There was a problem hiding this comment.
We should also raise if we have a negative base and a fractional exponent.
| m.optimize() | ||
|
|
||
| # C-level pow with a negative exponent (matches Python: 2.0**-2.0 == 0.25) | ||
| assert 2.0 ** -2.0 == 0.25 |
There was a problem hiding this comment.
What's the point of this?
Replace the Python
**in PowExpr._evaluate with the Cpow()function and keep the Python semantics for raising zero to a negative power.PowExpr._evaluateover(x + x + 1) ** -2.0with a fixed solution,n = 5_000_000, min of 3 rounds:**)c_pow+ guard)~25-30% speedup.