Looses type of nested/inner collection in a `flatten(filter(...))` chain

Aberta
#9,176 1 comentário 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
35/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
python
Domínio
devtools

Direção de pesquisa

Comece reproduzindo o exemplo reduzido de Python com as versões relatadas do mypy e inspecione como a inferência de tipos trata o callback de filtro dentro de chain.from_iterable. Considera-se concluído quando o exemplo passa na verificação de tipos e o tipo revelado de d continua sendo Iterator[int] sem enfraquecer o comportamento do caso de filtro mais simples.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

needs discussion

In the following, very reduced code line d does not typecheck.

from itertools import chain
from typing import List


ints_of_ints: List[List[int]]
c = filter(lambda ints: len(ints), ints_of_ints)  # ok
reveal_type(c)  # typing.Iterator[builtins.list[builtins.int]]

d = chain.from_iterable(filter(lambda ints: len(ints), ints_of_ints))  # mypy: error arg-type - Argument 1 to "len" has incompatible type
                                                                       # "Iterable[int]"; expected "Sized"
reveal_type(d)  # typing.Iterator[builtins.int*]

The interesting or surprising part is that inside the d line mypy thinks that ints is Iterable[int].

Tried mypy 0.782 and mypy-0.790+dev.4cf246f3bb2589d343fe1fdb67a42a23a23c041b.dirty

image

Linguagem predominante
Python
Estrelas
20.6k
Forks
3.3k
Merge médio
1d 18h
PRs com merge (30d)
54

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de python/mypy

Todas as issues de python/mypy

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.