╭─────────────────────────────── Traceback (most recent call last) ────────────────────────────────╮
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/expr/types/core.py:99 in __rich_console__ │
│ │
│ 96 │ │ │
│ 97 │ │ try: │
│ 98 │ │ │ if opts.interactive: │
│ ❱ 99 │ │ │ │ rich_object = to_rich(self, console_width=console_width) │
│ 100 │ │ │ else: │
│ 101 │ │ │ │ rich_object = Text(self._noninteractive_repr()) │
│ 102 │ │ except Exception as e: │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/expr/types/pretty.py:271 in to_rich │
│ │
│ 268 │ │ │ expr, max_length=max_length, max_string=max_string, max_depth=max_depth │
│ 269 │ │ ) │
│ 270 │ else: │
│ ❱ 271 │ │ return _to_rich_table( │
│ 272 │ │ │ expr, │
│ 273 │ │ │ max_rows=max_rows, │
│ 274 │ │ │ max_columns=max_columns, │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/expr/types/pretty.py:342 in _to_rich_table │
│ │
│ 339 │ │ if orig_ncols > len(computed_cols): │
│ 340 │ │ │ table = table.select(*computed_cols) │
│ 341 │ │
│ ❱ 342 │ result = table.limit(max_rows + 1).to_pyarrow() │
│ 343 │ # Now format the columns in order, stopping if the console width would │
│ 344 │ # be exceeded. │
│ 345 │ col_info = [] │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/too │
│ lz/functoolz.py:304 in __call__ │
│ │
│ 301 │ │
│ 302 │ def __call__(self, *args, **kwargs): │
│ 303 │ │ try: │
│ ❱ 304 │ │ │ return self._partial(*args, **kwargs) │
│ 305 │ │ except TypeError as exc: │
│ 306 │ │ │ if self._should_curry(args, kwargs, exc): │
│ 307 │ │ │ │ return self.bind(*args, **kwargs) │
│ │
│ /home/runner/work/letsql/letsql/python/letsql/backends/let/hotfix.py:196 in letsql_invoke │
│ │
│ 193 │ │ if dt not in con._sources.sources: │
│ 194 │ │ │ con.register(dt.to_expr(), dt.name) │
│ 195 │ method = getattr(con, f"{_methodname}") │
│ ❱ 196 │ return method(self, *args, **kwargs) │
│ 197 │
│ 198 │
│ 199 for typ, methodnames in ( │
│ │
│ /home/runner/work/letsql/letsql/python/letsql/backends/let/__init__.py:233 in to_pyarrow │
│ │
│ 230 │ │
│ 231 │ def to_pyarrow(self, expr: ir.Expr, **kwargs: Any) -> pa.Table: │
│ 232 │ │ backend, expr = self._get_backend_and_expr(expr) │
│ ❱ 233 │ │ return backend.to_pyarrow(expr.unbind(), **kwargs) │
│ 234 │ │
│ 235 │ def to_pyarrow_batches( │
│ 236 │ │ self, │
│ │
│ /home/runner/work/letsql/letsql/python/letsql/backends/datafusion/__init__.py:726 in to_pyarrow │
│ │
│ 723 │ │ ) │
│ 724 │ │
│ 725 │ def to_pyarrow(self, expr: ir.Expr, **kwargs: Any) -> pa.Table: │
│ ❱ 726 │ │ batch_reader = self._to_pyarrow_batches(expr, **kwargs) │
│ 727 │ │ arrow_table = batch_reader.read_all() │
│ 728 │ │ return expr.__pyarrow_result__(arrow_table) │
│ 729 │
│ │
│ /home/runner/work/letsql/letsql/python/letsql/backends/datafusion/__init__.py:698 in │
│ _to_pyarrow_batches │
│ │
│ 695 │ │ self._register_udfs(expr) │
│ 696 │ │ self._register_in_memory_tables(expr) │
│ 697 │ │ table_expr = expr.as_table() │
│ ❱ 698 │ │ raw_sql = self.compile(table_expr, **kwargs) │
│ 699 │ │ frame = self.con.sql(raw_sql) │
│ 700 │ │ schema = table_expr.schema() │
│ 701 │ │ pyarrow_schema = schema.to_pyarrow() │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/backends/sql/__init__.py:177 in compile │
│ │
│ 174 │ │ **kwargs: Any, │
│ 175 │ ): │
│ 176 │ │ """Compile an Ibis expression to a SQL string.""" │
│ ❱ 177 │ │ query = self._to_sqlglot(expr, limit=limit, params=params, **kwargs) │
│ 178 │ │ sql = query.sql(dialect=self.dialect, pretty=pretty, copy=False) │
│ 179 │ │ self._log(sql) │
│ 180 │ │ return sql │
│ │
│ /home/runner/work/letsql/letsql/python/letsql/backends/let/__init__.py:316 in _to_sqlglot │
│ │
│ 313 │ │ op = expr.op() │
│ 314 │ │ out = op.map_clear(replace_cache_table) │
│ 315 │ │ │
│ ❱ 316 │ │ return super()._to_sqlglot(out.to_expr(), limit=limit, params=params) │
│ 317 │ │
│ 318 │ def sql( │
│ 319 │ │ self, │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/backends/sql/__init__.py:159 in _to_sqlglot │
│ │
│ 156 │ │ if params is None: │
│ 157 │ │ │ params = {} │
│ 158 │ │ │
│ ❱ 159 │ │ sql = self.compiler.translate(table_expr.op(), params=params) │
│ 160 │ │ assert not isinstance(sql, sge.Subquery) │
│ 161 │ │ │
│ 162 │ │ if isinstance(sql, sge.Table): │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/backends/sql/compiler.py:457 in translate │
│ │
│ 454 │ │ # substitute parameters immediately to avoid having to define a │
│ 455 │ │ # ScalarParameter translation rule │
│ 456 │ │ params = self._prepare_params(params) │
│ ❱ 457 │ │ op, ctes = sqlize( │
│ 458 │ │ │ op, │
│ 459 │ │ │ params=params, │
│ 460 │ │ │ rewrites=self.rewrites, │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/backends/sql/rewrites.py:235 in sqlize │
│ │
│ 232 │ │
│ 233 │ # apply the backend specific rewrites │
│ 234 │ if rewrites: │
│ ❱ 235 │ │ node = node.replace(reduce(operator.or_, rewrites)) │
│ 236 │ │
│ 237 │ # lower the expression graph to a SQL-like relational algebra │
│ 238 │ context = {"params": params} │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/common/graph.py:464 in replace │
│ │
│ 461 │ │ │
│ 462 │ │ """ │
│ 463 │ │ replacer = _coerce_replacer(replacer, context) │
│ ❱ 464 │ │ results = self.map(replacer, filter=filter) │
│ 465 │ │ return results.get(self, self) │
│ 466 │
│ 467 │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/common/graph.py:265 in map │
│ │
│ 262 │ │ │ │ k: _recursive_lookup(v, results) │
│ 263 │ │ │ │ for k, v in zip(node.__argnames__, node.__args__) │
│ 264 │ │ │ } │
│ ❱ 265 │ │ │ results[node] = fn(node, results, **kwargs) │
│ 266 │ │ │
│ 267 │ │ return results │
│ 268 │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/common/graph.py:188 in fn │
│ │
│ 185 │ │ │ # upward in the hierarchy, using a specialized __recreate__ method │
│ 186 │ │ │ # improves the performance by 17% compared node.__class__(**kwargs) │
│ 187 │ │ │ recreated = node.__recreate__(kwargs) │
│ ❱ 188 │ │ │ if (result := obj.match(recreated, ctx)) is NoMatch: │
│ 189 │ │ │ │ return recreated │
│ 190 │ │ │ else: │
│ 191 │ │ │ │ return result │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/common/patterns.py:930 in match │
│ │
│ 927 │ │
│ 928 │ def match(self, value, context): │
│ 929 │ │ for pattern in self.patterns: │
│ ❱ 930 │ │ │ result = pattern.match(value, context) │
│ 931 │ │ │ if result is not NoMatch: │
│ 932 │ │ │ │ return result │
│ 933 │ │ return NoMatch │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/common/patterns.py:930 in match │
│ │
│ 927 │ │
│ 928 │ def match(self, value, context): │
│ 929 │ │ for pattern in self.patterns: │
│ ❱ 930 │ │ │ result = pattern.match(value, context) │
│ 931 │ │ │ if result is not NoMatch: │
│ 932 │ │ │ │ return result │
│ 933 │ │ return NoMatch │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/common/patterns.py:930 in match │
│ │
│ 927 │ │
│ 928 │ def match(self, value, context): │
│ 929 │ │ for pattern in self.patterns: │
│ ❱ 930 │ │ │ result = pattern.match(value, context) │
│ 931 │ │ │ if result is not NoMatch: │
│ 932 │ │ │ │ return result │
│ 933 │ │ return NoMatch │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/common/patterns.py:930 in match │
│ │
│ 927 │ │
│ 928 │ def match(self, value, context): │
│ 929 │ │ for pattern in self.patterns: │
│ ❱ 930 │ │ │ result = pattern.match(value, context) │
│ 931 │ │ │ if result is not NoMatch: │
│ 932 │ │ │ │ return result │
│ 933 │ │ return NoMatch │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/common/patterns.py:930 in match │
│ │
│ 927 │ │
│ 928 │ def match(self, value, context): │
│ 929 │ │ for pattern in self.patterns: │
│ ❱ 930 │ │ │ result = pattern.match(value, context) │
│ 931 │ │ │ if result is not NoMatch: │
│ 932 │ │ │ │ return result │
│ 933 │ │ return NoMatch │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/common/patterns.py:930 in match │
│ │
│ 927 │ │
│ 928 │ def match(self, value, context): │
│ 929 │ │ for pattern in self.patterns: │
│ ❱ 930 │ │ │ result = pattern.match(value, context) │
│ 931 │ │ │ if result is not NoMatch: │
│ 932 │ │ │ │ return result │
│ 933 │ │ return NoMatch │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/common/patterns.py:930 in match │
│ │
│ 927 │ │
│ 928 │ def match(self, value, context): │
│ 929 │ │ for pattern in self.patterns: │
│ ❱ 930 │ │ │ result = pattern.match(value, context) │
│ 931 │ │ │ if result is not NoMatch: │
│ 932 │ │ │ │ return result │
│ 933 │ │ return NoMatch │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/common/patterns.py:389 in match │
│ │
│ 386 │ │ # use the `_` reserved variable to record the value being replaced │
│ 387 │ │ # in the context, so that it can be used in the replacer pattern │
│ 388 │ │ context["_"] = value │
│ ❱ 389 │ │ return self.replacer.resolve(context) │
│ 390 │
│ 391 │
│ 392 def replace(matcher): │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/common/deferred.py:325 in resolve │
│ │
│ 322 │ │ super().__init__(func=func) │
│ 323 │ │
│ 324 │ def resolve(self, context): │
│ ❱ 325 │ │ return self.func(**context) │
│ 326 │
│ 327 │
│ 328 class Attr(FrozenSlotted, Resolver): │
│ │
│ /home/runner/.cache/pypoetry/virtualenvs/letsql-uJiiVu6z-py3.10/lib/python3.10/site-packages/ibi │
│ s/backends/sql/rewrites.py:325 in rewrite_sample_as_filter │
│ │
│ 322 │ Errors as unsupported if a `seed` is specified. │
│ 323 │ """ │
│ 324 │ if _.seed is not None: │
│ ❱ 325 │ │ raise com.UnsupportedOperationError( │
│ 326 │ │ │ "`Table.sample` with a random seed is unsupported" │
│ 327 │ │ ) │
│ 328 │ return ops.Filter(_.parent, (ops.LessEqual(ops.RandomScalar(), _.fraction),)) │
╰──────────────────────────────────────────────────────────────────────────────────────────────────╯
UnsupportedOperationError: `Table.sample` with a random seed is unsupported