Skip to content

bug: pylance blows up on polars #3643

@dangotbanned

Description

@dangotbanned

Repro

I remember this happening occasionally a while back.

I seem to get this just by making edits in narwhals._polars.*, but to demonstrate:

from __future__ import annotations

import polars as pl

from narwhals import DataFrame
from narwhals._polars.expr import PolarsExpr
from narwhals._polars.namespace import PolarsNamespace
from narwhals._polars.series import PolarsSeries
from narwhals._polars.dataframe import PolarsDataFrame, PolarsLazyFrame
from narwhals.compliant import CompliantDataFrame, CompliantNamespace, CompliantSeries


def repro(s: PolarsSeries, df: PolarsDataFrame, ns: PolarsNamespace) -> None:
    _s: CompliantSeries[pl.Series] = s
    _df: CompliantDataFrame[  # try editing here
        PolarsSeries, PolarsExpr, pl.DataFrame, DataFrame[pl.DataFrame]
    ] = df
    _ns: CompliantNamespace[PolarsDataFrame | PolarsLazyFrame, PolarsExpr] = ns
Everything looks fine? (screenshot)

Image

Obliterated by a space (screenshot)

Image

Show all 8 diagnostics

Type "PolarsSeries" cannot be assigned to type variable "SeriesOrExprT@CompliantSelectorNamespace"
  Type "PolarsSeries" is not assignable to upper bound "CompliantSeriesOrNativeExprAny" for type variable "SeriesOrExprT@CompliantSelectorNamespace"
    Type "PolarsSeries" is not assignable to type "CompliantSeriesOrNativeExprAny"
      "PolarsSeries" is incompatible with protocol "CompliantSeries[Any]"
        "CompliantSeries[NativeSeriesT@CompliantSeries]" is not assignable to "PolarsSeries"
        "CompliantSeries[NativeSeriesT@CompliantSeries]" is not assignable to "PolarsSeries"
        "CompliantSeries[NativeSeriesT@CompliantSeries]" is not assignable to "PolarsSeries"
        "__narwhals_namespace__" is an incompatible type
          Type "() -> PolarsNamespace" is not assignable to type "() -> CompliantNamespace[Any, Any]"
  ...
Type "PolarsSeries" cannot be assigned to type variable "SeriesOrExprT@CompliantSelectorNamespace"
  Type "PolarsSeries" is not assignable to upper bound "CompliantSeriesOrNativeExprAny" for type variable "SeriesOrExprT@CompliantSelectorNamespace"
    Type "PolarsSeries" is not assignable to type "CompliantSeriesOrNativeExprAny"
      "PolarsSeries" is incompatible with protocol "CompliantSeries[Any]"
        "CompliantSeries[NativeSeriesT@CompliantSeries]" is not assignable to "PolarsSeries"
        "CompliantSeries[NativeSeriesT@CompliantSeries]" is not assignable to "PolarsSeries"
        "CompliantSeries[NativeSeriesT@CompliantSeries]" is not assignable to "PolarsSeries"
        "__narwhals_namespace__" is an incompatible type
          Type "() -> PolarsNamespace" is not assignable to type "() -> CompliantNamespace[Any, Any]"
  ...
Type "PolarsSeries" is not assignable to declared type "CompliantSeries[Series]"
  "PolarsSeries" is incompatible with protocol "CompliantSeries[Series]"
    "CompliantSeries[NativeSeriesT@CompliantSeries]" is not assignable to "PolarsSeries"
    "CompliantSeries[NativeSeriesT@CompliantSeries]" is not assignable to "PolarsSeries"
    "CompliantSeries[NativeSeriesT@CompliantSeries]" is not assignable to "PolarsSeries"
    "to_dummies" is an incompatible type
      Type "(*, separator: str, drop_first: bool) -> PolarsDataFrame" is not assignable to type "(*, separator: str, drop_first: bool) -> CompliantDataFrame[PolarsSeries, Any, Any, Any]"
        Function return type "PolarsDataFrame" is incompatible with type "CompliantDataFrame[PolarsSeries, Any, Any, Any]"
          "PolarsDataFrame" is incompatible with protocol "CompliantDataFrame[PolarsSeries, Any, Any, Any]"
  ...
Type "PolarsSeries" cannot be assigned to type variable "CompliantSeriesT@CompliantDataFrame"
  Type "PolarsSeries" is not assignable to upper bound "CompliantSeriesAny" for type variable "CompliantSeriesT@CompliantDataFrame"
    "PolarsSeries" is incompatible with protocol "CompliantSeries[Any]"
      "CompliantSeries[NativeSeriesT@CompliantSeries]" is not assignable to "PolarsSeries"
      "CompliantSeries[NativeSeriesT@CompliantSeries]" is not assignable to "PolarsSeries"
      "CompliantSeries[NativeSeriesT@CompliantSeries]" is not assignable to "PolarsSeries"
      "__narwhals_namespace__" is an incompatible type
        Type "() -> PolarsNamespace" is not assignable to type "() -> CompliantNamespace[Any, Any]"
          Function return type "PolarsNamespace" is incompatible with type "CompliantNamespace[Any, Any]"
  ...
Type "PolarsExpr" cannot be assigned to type variable "CompliantExprT_contra@CompliantDataFrame"
  Type "PolarsExpr" is not assignable to upper bound "CompliantExprAny" for type variable "CompliantExprT_contra@CompliantDataFrame"
    "PolarsExpr" is incompatible with protocol "CompliantExpr[Any, Any]"
      "CompliantExpr[CompliantFrameT@CompliantExpr, CompliantSeriesOrNativeExprT_co@CompliantExpr]" is not assignable to "PolarsExpr"
      "__narwhals_namespace__" is an incompatible type
        Type "() -> PolarsNamespace" is not assignable to type "() -> CompliantNamespace[CompliantFrameT@CompliantExpr, PolarsExpr]"
          Function return type "PolarsNamespace" is incompatible with type "CompliantNamespace[CompliantFrameT@CompliantExpr, PolarsExpr]"
      "CompliantExpr[CompliantFrameT@CompliantExpr, CompliantSeriesOrNativeExprT_co@CompliantExpr]" is not assignable to "PolarsExpr"
      "_StoresCompliant[CompliantT_co@NameNamespace]" is not assignable to "PolarsExprNameNamespace"
  ...
Type "PolarsDataFrame" is not assignable to declared type "CompliantDataFrame[PolarsSeries, PolarsExpr, polars.dataframe.frame.DataFrame, narwhals.dataframe.DataFrame[polars.dataframe.frame.DataFrame]]"
  "PolarsDataFrame" is incompatible with protocol "CompliantDataFrame[PolarsSeries, PolarsExpr, polars.dataframe.frame.DataFrame, narwhals.dataframe.DataFrame[polars.dataframe.frame.DataFrame]]"
    "__getitem__" is an incompatible type
      Type "(item: tuple[MultiIndexSelector[PolarsSeries] | SingleIndexSelector, MultiColSelector[PolarsSeries]]) -> Any" is not assignable to type "(item: tuple[SingleIndexSelector | _Slice[int] | _SliceNone | Sequence[int] | CompliantSeriesT@CompliantDataFrame | _1DArrayInt, MultiColSelector[CompliantSeriesT@CompliantDataFrame]]) -> PolarsDataFrame"
        Parameter 1: type "tuple[SingleIndexSelector | _Slice[int] | _SliceNone | Sequence[int] | CompliantSeriesT@CompliantDataFrame | _1DArrayInt, MultiColSelector[CompliantSeriesT@CompliantDataFrame]]" is incompatible with type "tuple[MultiIndexSelector[PolarsSeries] | SingleIndexSelector, MultiColSelector[PolarsSeries]]"
          "tuple[SingleIndexSelector | _Slice[int] | _SliceNone | Sequence[int] | CompliantSeriesT@CompliantDataFrame | _1DArrayInt, MultiColSelector[CompliantSeriesT@CompliantDataFrame]]" is not assignable to "tuple[MultiIndexSelector[PolarsSeries] | SingleIndexSelector, MultiColSelector[PolarsSeries]]"
    "CompliantDataFrame[CompliantSeriesT@CompliantDataFrame, CompliantExprT_contra@CompliantDataFrame, NativeDataFrameT@CompliantDataFrame, ToNarwhalsT_co@CompliantDataFrame]" is not assignable to "PolarsDataFrame"
    "get_column" is an incompatible type
      Type "(name: str) -> PolarsSeries" is not assignable to type "(name: str) -> CompliantSeriesT@CompliantDataFrame"
  ...
Type "PolarsExpr" cannot be assigned to type variable "CompliantExprT@CompliantNamespace"
  Type "PolarsExpr" is not assignable to upper bound "CompliantExprAny" for type variable "CompliantExprT@CompliantNamespace"
    "PolarsExpr" is incompatible with protocol "CompliantExpr[Any, Any]"
      "CompliantExpr[CompliantFrameT@CompliantExpr, CompliantSeriesOrNativeExprT_co@CompliantExpr]" is not assignable to "PolarsExpr"
      "__narwhals_namespace__" is an incompatible type
        Type "() -> PolarsNamespace" is not assignable to type "() -> CompliantNamespace[CompliantFrameT@CompliantExpr, PolarsExpr]"
          Function return type "PolarsNamespace" is incompatible with type "CompliantNamespace[CompliantFrameT@CompliantExpr, PolarsExpr]"
      "CompliantExpr[CompliantFrameT@CompliantExpr, CompliantSeriesOrNativeExprT_co@CompliantExpr]" is not assignable to "PolarsExpr"
      "CompliantColumn" is not assignable to "PolarsExpr"
  ...
Type "PolarsNamespace" is not assignable to declared type "CompliantNamespace[PolarsDataFrame | PolarsLazyFrame, PolarsExpr]"
  "PolarsNamespace" is incompatible with protocol "CompliantNamespace[PolarsDataFrame | PolarsLazyFrame, PolarsExpr]"
    "_expr" is an incompatible type
      Type "() -> type[PolarsExpr]" is not assignable to type "() -> type[CompliantExprT@CompliantNamespace]"
        "CompliantNamespace[CompliantFrameT@CompliantNamespace, CompliantExprT@CompliantNamespace]" is not assignable to "PolarsNamespace"
        Function return type "type[PolarsExpr]" is incompatible with type "type[CompliantExprT@CompliantNamespace]"
          Type "PolarsExpr" is not assignable to type "CompliantExprAny"
    "all" is an incompatible type
      Type "Method[PolarsExpr]" is not assignable to type "() -> CompliantExprT@CompliantNamespace"
  ...

IIUC, this is related to Pylance (not pyright) hitting a cycle 🤔

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions