mypy icon indicating copy to clipboard operation
mypy copied to clipboard

`set` operations and unpacking

Open Molkree opened this issue 3 years ago • 1 comments

Bug Report

Error on a valid code.

To Reproduce

sets = map(set[str], ["aaa", "abb", "acc"])
intersection = set[str].intersection(*sets)

mypy Playground

Actual Behavior

Argument 1 to "intersection" of "set" has incompatible type "*map[Set[str]]"; expected "Set[_T]" [arg-type]

Your Environment

  • Mypy version used: 0.991
  • Mypy command-line flags: --strict (it's present without strict checking as well)
  • Mypy configuration options from mypy.ini (and other config files): None
  • Python version used: 3.11

This issue is present for a bunch of other set methods like union and difference (I guess all of them that accept *s: Iterable[T]). Possibly related #9706.

Molkree avatar Dec 06 '22 16:12 Molkree

Same:

@dataclass
class StatsEntry:
    val0: int
    val1: int
    val2: int

    def __post_init__(self) -> None:
        for field in dcfields(self):
            value = getattr(self, field.name)
            setattr(self, field.name, field.type(value))


entry = line.rstrip().split(',')
stat = StatsEntry(*entry) #type: ignore
# Argument 1 to "StatsEntry" has incompatible type "*List[str]"; expected "int"  [arg-type]mypy(error)

Kein avatar Jan 19 '23 00:01 Kein

Another example (mypy-playground):

from typing import Mapping, Any

def joint_keys(*dicts: Mapping[str, Any]) -> set[str]:
    """Find joint keys in collection of dictionaries."""
    return set.intersection(*map(set, dicts))    # ✘ [arg-type]

def joint_keys2(*dicts: Mapping[str, Any]) -> set[str]:
    """Find joint keys in collection of dictionaries."""
    dicts_keys: map[set[str]] = map(set, dicts)  # ✔
    return set.intersection(*dicts_keys)         # ✔

pyright raises no errors, so likely an issue with mypy (and not with stubs).

EDIT: It is fixed using the --new-type-inference flag on master branch

https://mypy-play.net/?mypy=master&python=3.11&gist=95765a01a9543509a1c740f4f9448397&flags=new-type-inference

randolf-scholz avatar Aug 03 '23 15:08 randolf-scholz