Skip to content

feat(RFC): A richer Expr IR #18940

feat(RFC): A richer Expr IR

feat(RFC): A richer Expr IR #18940

Triggered via pull request December 23, 2025 14:57
Status Success
Total duration 1m 1s
Artifacts

release-drafter.yml

on: pull_request
update_release_draft
6s
update_release_draft
Fit to window
Zoom out
Zoom in

Annotations

2 errors and 4 warnings
update_release_draft
HttpError: Validation Failed: {"resource":"Release","code":"invalid","field":"target_commitish"} at /home/runner/work/_actions/release-drafter/release-drafter/v6/dist/index.js:7146:21 at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async Job.doExecute (/home/runner/work/_actions/release-drafter/release-drafter/v6/dist/index.js:61885:18) { name: 'AggregateError', event: { id: '20464022261', name: 'pull_request', payload: { action: 'edited', changes: { body: { from: 'Will close #2571\r\n' + '## What type of PR is this? (check all applicable)\r\n' + '\r\n' + '- [x] ✨ Feature\r\n' + '\r\n' + '## Related issues\r\n' + '\r\n' + '- Closes #2571\r\n' + ' - See *Related* section there for more links\r\n' + '- Search PRs: [`(sort:updated-desc "(expr-ir)/" in:title)`](https://github.com/narwhals-dev/narwhals/pulls?q=sort%3Aupdated-desc+is%3Apr+%22%28expr-ir%29%2F%22+in%3Atitle)\r\n' + '\r\n' + '## Checklist\r\n' + '\r\n' + '- [x] Code follows style guide (ruff)\r\n' + '- [x] Tests added\r\n' + '- [ ] Documented the changes\r\n' + '\r\n' + '## If you have comments or can explain your changes, please do so below\r\n' + '> [!IMPORTANT]\r\n' + '> See (#2571) for detail!!!!!!!\r\n' + '\r\n' + '**Very open to feedback**\r\n' + '\r\n' + '## Tasks\r\n' + '\r\n' + '<details><summary><b>Show 2025 May-July</b></summary>\r\n' + '<p>\r\n' + '\r\n' + '- [x] Investigate the sources for [`pl.Expr.meta`](https://docs.pola.rs/api/python/stable/reference/expressions/meta.html)\r\n' + ' - Reproducing how some of those methods work would be huge\r\n' + ' - See ([exploring `pl.Expr.meta`](https://github.com/narwhals-dev/narwhals/pull/2572/commits/98292dcae05d651722b5a924dce6043c085e74f0))\r\n' + '- [x] Implement iteration methods for `ExprIR`\r\n' + ' - Needed for `meta` methods\r\n' + ' - [feat: Add Expr graph iteration methods](https://github.com/narwhals-dev/narwhals/pull/2572/commits/394627dcbe3e3aa26d412e0286a3821b6cef70ea)\r\n' + '- [x] #2578 \r\n' + ' - ~~Merge another PR with (https://github.com/narwhals-dev/narwhals/pull/2391#issuecomment-2832442331) first~~\r\n' + ' - Wanting to use `TypeVar` defaults more\r\n' + ' - A lot of places should have `TypeVar("T", bound=Thing, default=Thing)`, instead of an opaque `ExprIR`\r\n' + '- [x] `Selector`(s)\r\n' + ' https://github.com/narwhals-dev/narwhals/blob/0bada4851ebd08380da1d000e1d2e553229e1689/narwhals/_plan/expr.py#L336-L337\r\n' + ' - [x] Add a variant of [`BinaryExpr`](https://github.com/narwhals-dev/narwhals/blob/0bada4851ebd08380da1d000e1d2e553229e1689/narwhals/_plan/expr.py#L87-L105) that describes the restricted set of operators that are allowed\r\n' + ' - [x] Some WIP-rogress (https://github.com/narwhals-dev/narwhals/pull/2572/commits/87b8402ba8ace8019f0f1cc58ce8b9981d57a709)\r\n' + ' - [x] Very close (https://github.com/narwhals-dev/narwhals/pull/2572/commits/b9eb25e56be22407f8c3a68860efced6fe2419a7)\r\n' + ' - [x] ([feat: Add selectors reprs](https://github.com/narwhals-dev/narwhals/pull/2572/commits/233c67087a7420890e3de19562d35142833966ad))\r\n' + ' - Deviating a bit from `polars`, since they wrap `pl.col` internally\r\n' + '- [x] Accept `IntoExpr` in more places (including and **beyond what `narwhals` allows now**)\r\n' + ' - [x] `demo.py`\r\n' + ' - [x] [`*_horizontal`](https://github.com/narwhals-dev/narwhals/pull/2572/commits/0bada4851ebd08380da1d000e1d2e553229e1689)\r\n' + ' - [x] ([feat:
update_release_draft
Validation Failed: {"resource":"Release","code":"invalid","field":"target_commitish"} { name: 'HttpError', id: '20464022261', status: 422, response: { url: 'https://api.github.com/repos/narwhals-dev/narwhals/releases/245770708', status: 422, headers: { 'access-control-allow-origin': '*', 'access-control-expose-headers': 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset', 'content-length': '210', 'content-security-policy': "default-src 'none'", 'content-type': 'application/json; charset=utf-8', date: 'Tue, 23 Dec 2025 14:58:11 GMT', 'referrer-policy': 'origin-when-cross-origin, strict-origin-when-cross-origin', server: 'github.com', 'strict-transport-security': 'max-age=31536000; includeSubdomains; preload', vary: 'Accept-Encoding, Accept, X-Requested-With', 'x-accepted-github-permissions': 'contents=write', 'x-content-type-options': 'nosniff', 'x-frame-options': 'deny', 'x-github-api-version-selected': '2022-11-28', 'x-github-media-type': 'github.v3; format=json', 'x-github-request-id': 'C431:60EEA:2FD216C:CEDE240:694AAE03', 'x-ratelimit-limit': '5000', 'x-ratelimit-remaining': '4950', 'x-ratelimit-reset': '1766505376', 'x-ratelimit-resource': 'core', 'x-ratelimit-used': '50', 'x-xss-protection': '0' }, data: { message: 'Validation Failed', errors: [ { resource: 'Release', code: 'invalid', field: 'target_commitish' } ], documentation_url: 'https://docs.github.com/rest/releases/releases#update-a-release', status: '422' } }, request: { method: 'PATCH', url: 'https://api.github.com/repos/narwhals-dev/narwhals/releases/245770708', headers: { accept: 'application/vnd.github.v3+json', 'user-agent': 'probot/12.4.0 octokit-core.js/3.6.0 Node.js/20.19.5 (linux; x64)', 'x-github-delivery': '20464022261', authorization: 'token [REDACTED]', 'content-type': 'application/json; charset=utf-8' }, body: '{"body":"## Changes\\n\\n- ci: Test fairlearn using pytest marker (#3234)\\n\\n## ✨ Enhancements\\n\\n- feat(expr-ir): Impl `DataFrame.unique` (#3364)\\n\\n## 🐞 Bug fixes\\n\\n- fix(docs): Keep table filter only in api-completeness page (#3367)\\n- ci: Fix `hierarchicalforecast` installation (#3362)\\n\\n## 📖 Documentation\\n\\n- fix(docs): Keep table filter only in api-completeness page (#3367)\\n- feat(expr-ir): Add `list.sort` (#3359)\\n- feat(expr-ir): Add `list.*` aggregate methods (#3353)\\n\\n## 🛠️ Other improvements\\n\\n- feat(expr-ir): Add `DataFrame.write_{csv,parquet}` (#3369)\\n- feat(expr-ir): Add `BaseFrame.unpivot` (#3368)\\n- feat(expr-ir): Impl `DataFrame.unique` (#3364)\\n- chore: Refactor pandas-like pyarrow branching (#3361)\\n- feat(expr-ir): Add `list.sort` (#3359)\\n- feat(expr-ir): Add `list.*` aggregate methods (#3353)\\n\\nThank you to all our contributors for making this release possible!\\n@FBruzzesi, @MarcoGorelli and @dangotbanned\\n","draft":true,"prerelease":false,"make_latest":"true","name":"Narwhals unreleased","tag_name":"untagged-5857ee5b463af7437b01","target_commitish":"refs/pull/2572/merge"}', request: {} }, event: { id: '20464022261', name: 'pull_request', payload: { action: 'edited', changes: { body: { from: 'Will close #2571\r\n' + '## What type of PR is this? (check all applicable)\r\n' + '\r\n' + '- [x] ✨ Feature\r\n' + '\r\n' + '## Related issues\r\n' + '\r\n' + '- Closes #2571\r\n' + ' - See *Related* section there for more links\r\n' + '- Search PRs: [`(sort:updated-desc "(expr-ir)/" in:title)`](https:
update_release_draft
"pull_request_target.edited" is not a known webhook name (https://developer.github.com/v3/activity/events/types/)
update_release_draft
"pull_request_target.synchronize" is not a known webhook name (https://developer.github.com/v3/activity/events/types/)
update_release_draft
"pull_request_target.reopened" is not a known webhook name (https://developer.github.com/v3/activity/events/types/)
update_release_draft
"pull_request_target.opened" is not a known webhook name (https://developer.github.com/v3/activity/events/types/)