{"record":{"id":"0f02b59ef59a457e","repo":"pola-rs/polars","slug":"expected-at-least-one-series-in-cov-inputs-if-e","errorCode":null,"errorMessage":"expected at least one Series in 'cov' inputs if 'eager=True'","messagePattern":"expected at least one Series in 'cov' inputs if 'eager=True'","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"py-polars/src/polars/functions/lazy.py","lineNumber":1042,"sourceCode":"    ╞═════╪═════╡\n    │ 3.0 ┆ 6.0 │\n    └─────┴─────┘\n\n    Eager evaluation:\n\n    >>> s1 = pl.Series(\"a\", [1, 8, 3])\n    >>> s2 = pl.Series(\"b\", [4, 5, 2])\n    >>> pl.cov(s1, s2, eager=True)\n    shape: (1,)\n    Series: 'a' [f64]\n    [\n        3.0\n    ]\n    \"\"\"\n    if eager:\n        if not (isinstance(a, pl.Series) or isinstance(b, pl.Series)):\n            msg = \"expected at least one Series in 'cov' inputs if 'eager=True'\"\n            raise ValueError(msg)\n\n        frame = pl.DataFrame([e for e in (a, b) if isinstance(e, pl.Series)])\n        exprs = ((e.name if isinstance(e, pl.Series) else e) for e in (a, b))\n        return frame.select(cov(*exprs, eager=False, ddof=ddof)).to_series()\n    else:\n        a_pyexpr = parse_into_expression(a)\n        b_pyexpr = parse_into_expression(b)\n        return wrap_expr(plr.cov(a_pyexpr, b_pyexpr, ddof))\n\n\nclass _map_batches_wrapper:\n    def __init__(\n        self,\n        function: Callable[[Sequence[Series]], Series | Any],\n        *,\n        returns_scalar: bool,\n    ) -> None:\n        self.function = function","sourceCodeStart":1024,"sourceCodeEnd":1060,"githubUrl":"https://github.com/pola-rs/polars/blob/fe841f959ef4d2ceefc05a310d33ed7b1ab24e5e/py-polars/src/polars/functions/lazy.py#L1024-L1060","documentation":"`pl.cov(a, b, eager=True)` requires at least one input to be a `pl.Series` so it can construct the DataFrame used for eager evaluation; if neither is a Series it raises ValueError. String column names or expressions are only valid in lazy mode.","triggerScenarios":"Calling `pl.cov(\"a\", \"b\", eager=True)` with two string column names or two Exprs.","commonSituations":"Mixing lazy and eager API conventions; converting code from `df.select(pl.cov(...))` to eager form without converting inputs.","solutions":["Pass at least one `pl.Series`, e.g. `pl.cov(df[\"a\"], df[\"b\"], eager=True)`","Use `df.select(pl.cov(\"a\", \"b\"))` for lazy/expr inputs","Remove `eager=True` if lazy evaluation was intended"],"exampleFix":"// before\npl.cov(\"a\", \"b\", eager=True)\n// after\ndf.select(pl.cov(\"a\", \"b\"))","handlingStrategy":"type-guard","validationCode":"if eager and not (isinstance(a, pl.Series) or isinstance(b, pl.Series)):\n    raise TypeError(\"cov(eager=True) needs at least one pl.Series\")","typeGuard":"def cov_eager_ok(a, b): return isinstance(a, pl.Series) or isinstance(b, pl.Series)","tryCatchPattern":"try:\n    return pl.cov(a, b, eager=True)\nexcept ValueError:\n    return df.select(pl.cov(a, b)).to_series()","preventionTips":["Use df.select(pl.cov(\"a\", \"b\")) for name/expr inputs","Convert with df[\"col\"] before eager calls","Don't mix lazy-style strings with eager=True"],"tags":["python","polars","dataframe","arguments"],"backgroundTag":"invalid-argument-value","analyzedSha":"fe841f959ef4d2ceefc05a310d33ed7b1ab24e5e","analyzedAt":"2026-09-18T22:14:11.667Z","contentChangedAt":"2026-09-18T22:14:11.667Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}