facebook / facebook/pyrefly

special-case `NotImplementedType` in binop signatures to match runtime semantics

Open
#1,129 2 comments 0 reactions 0 assignees View on GitHub
typechecking
Dominant language
Rust
Stars
7k
Forks
516
PR merge metrics
No merged PRs in 30d

Description

### Describe the Bug

```py
from types import NotImplementedType

class A:
def __add__(self, i: object) -> NotImplementedType: ...

class B:
def __radd__(self, i: A) -> int: ...

_ = A() + B() # _NotImplementedType
```

binops can `Never` return `NotImplementedType` by cause of runtime semantics, i would expect this to result in `Never` or `int`

### Sandbox Link

_No response_

### (Only applicable for extension issues) IDE Information

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.