Commit e04a802
fix(safeeval): evaluate rewritten AST instead of original string (#9063)
Fixes #9062
## Summary
- `_RewriteConstNp.visit_Constant` returned an `ast.Module` (from
`ast.parse()`) instead of an expression node, corrupting the tree. Fixed
by using `mode="eval"` and extracting `.body`.
- `safe_eval` evaluated the original `expr` string rather than the
rewritten AST, so numpy-wrapping was silently discarded. Fixed by
compiling and evaluating the parsed AST.
- Fixed a typo in the docstring ("expressoini" -> "expression").
## Test plan
- [x] Existing `test_good_exprs` and `test_good_exprs_np` still pass
(numerical correctness)
- [x] New `test_rewrite_np_produces_numpy_types` verifies int/float
literals are wrapped in numpy types
- [x] New `test_rewrite_np_large_exponent` verifies `9**9**9` overflows
under `np.int32` instead of producing a slow ~369-million-digit Python
integer
---------
Signed-off-by: Chhayan Jain <chhayankjain@gmail.com>
Signed-off-by: chhayankjain <chhayank44@gmail.com>
Signed-off-by: Eric Kerfoot <17726042+ericspod@users.noreply.github.com>
Co-authored-by: Eric Kerfoot <17726042+ericspod@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>1 parent 43c0aae commit e04a802
2 files changed
Lines changed: 40 additions & 8 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
50 | | - | |
51 | | - | |
52 | | - | |
53 | | - | |
54 | | - | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
55 | 56 | | |
56 | 57 | | |
57 | 58 | | |
| |||
74 | 75 | | |
75 | 76 | | |
76 | 77 | | |
77 | | - | |
| 78 | + | |
78 | 79 | | |
79 | 80 | | |
80 | 81 | | |
| |||
101 | 102 | | |
102 | 103 | | |
103 | 104 | | |
104 | | - | |
| 105 | + | |
| 106 | + | |
105 | 107 | | |
106 | | - | |
| 108 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
17 | 18 | | |
18 | 19 | | |
19 | 20 | | |
| |||
62 | 63 | | |
63 | 64 | | |
64 | 65 | | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
65 | 95 | | |
66 | 96 | | |
67 | 97 | | |
0 commit comments