Test that chained comparisons are transformed for query() consistency. Chained comparisons like 'a < b < c' are transformed to '(a < b) & (b < c)' to match pd.eval() behavior, which query() uses.
()
| 95 | |
| 96 | |
| 97 | def test_eval_chained_comparisons() -> None: |
| 98 | """Test that chained comparisons are transformed for query() consistency. |
| 99 | |
| 100 | Chained comparisons like 'a < b < c' are transformed to '(a < b) & (b < c)' |
| 101 | to match pd.eval() behavior, which query() uses. |
| 102 | """ |
| 103 | ds = Dataset({"x": ("dim", np.arange(10))}) |
| 104 | |
| 105 | # Basic chained comparison: 2 < x < 7 |
| 106 | actual = ds.eval("2 < x < 7") |
| 107 | expect = (ds["x"] > 2) & (ds["x"] < 7) |
| 108 | assert_identical(expect, actual) |
| 109 | |
| 110 | # Mixed operators: 0 <= x < 5 |
| 111 | actual = ds.eval("0 <= x < 5") |
| 112 | expect = (ds["x"] >= 0) & (ds["x"] < 5) |
| 113 | assert_identical(expect, actual) |
| 114 | |
| 115 | # Explicit bitwise operators also work |
| 116 | actual = ds.eval("(x > 2) & (x < 7)") |
| 117 | expect = (ds["x"] > 2) & (ds["x"] < 7) |
| 118 | assert_identical(expect, actual) |
| 119 | |
| 120 | |
| 121 | def test_eval_restricted_syntax() -> None: |
nothing calls this directly
no test coverage detected
searching dependent graphs…