Experiment with backtracking in the new solver
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 20/100
Direção de pesquisa
Comece lendo a issue #15906 e a série de acompanhamento na pull request #15287 para entender as alterações no solver que já estão em andamento. Em seguida, examine o exemplo de restrição de variável de tipo nesta issue e determine como delimitar um experimento de backtracking. Para considerar o trabalho concluído, seria necessário ter um design acordado e evidências sobre falhas de inferência e o comportamento no pior caso.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Depend on https://github.com/python/mypy/issues/15906. This is a follow-up for series started by https://github.com/python/mypy/pull/15287
Currently when getting both upper and lower bounds for a type variable we randomly choose the lower one. This is not always the best choice and can lead to inference failures. A possible example is:
def dec(fn: Callable[[S, S, int], float]) -> Callable[[S], float]: ...
def f(x: List[float], y: List[T], z: T) -> T: ...
dec(f)
this will infer constraints like
S <: List[float], S <: List[T], T <: float, T :> int
They split into two SCCs each containing one variable {T} and {S}, and the second depends on first one. So we would first solve T = int and then we will get updated constraints for S: S <: List[float], S <: List[int], with the only solution S = <nothing>. At the same time T = float, S = List[float] is a totally valid solution. We could get it by backtracking when we get <nothing> and trying different bound(s) in the previous SCC.
One possible problem I see is that this backtracking is exponential in worst case of inference failure (e.g. due to actual user error). Another problem is that backtracking can make implementation much less readable.
cc @JukkaL
- Linguagem predominante
- Python
- Estrelas
- 20.6k
- Forks
- 3.3k
- Merge médio
- 1d 18h
- PRs com merge (30d)
- 54
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de python/mypy
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
-
documentation
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
-
bug topic-configuration topic-error-reporting
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Todas as issues de python/mypy
Issues semelhantes
-
area/auth bug comp/agent P3 platform/discord type/security
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
NousResearch/hermes-agent#117848 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
bancolombia/sentinel#23 ·
-
test md AbertaCI
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
-
integration:quickjs org:external priority:backlog topic:code-interpreter topic:middleware type:feature
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
langchain-ai/deepagents#6450 ·
-
bug client
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100