New GitHub issue #100708 from adonig:<br>
<hr>
<pre>
# Bug report
A generic function decorated with functools.cache returns the wrong type sometimes. Try this example:
```
from decimal import Decimal
from functools import cache
from typing import SupportsRound, TypeVar
_T = TypeVar("_T")
@cache
def rnd(val: SupportsRound[_T]) -> _T:
return round(val, 2)
def test_rnd():
actual = rnd(Decimal("123"))
assert actual == Decimal("123")
assert type(actual) == Decimal
actual = rnd(123.0)
assert actual == 123.0
assert type(actual) == float
```
My understanding is that the test should run without raising any errors but instead the last assertion fails:
```
./xxx/tests/test_cache.py::test_rnd Failed: [undefined]AssertionError: assert <class 'decimal.Decimal'> == float
+ where <class 'decimal.Decimal'> = type(Decimal('123.00'))
def test_rnd():
actual = rnd(Decimal("123"))
assert actual == Decimal("123")
assert type(actual) == Decimal
actual = rnd(123.0)
assert actual == 123.0
> assert type(actual) == float
E AssertionError: assert <class 'decimal.Decimal'> == float
E + where <class 'decimal.Decimal'> = type(Decimal('123.00'))
xxx/tests/test_cache.py:19: AssertionError
```
# Your environment
- CPython versions tested on: Python 3.11.0
- Operating system and architecture: Darwin mbp 22.1.0 Darwin Kernel Version 22.1.0: Sun Oct 9 20:14:54 PDT 2022; root:xnu-8792.41.9~2/RELEASE_X86_64 x86_64
</pre>
<hr>
<a href="https://github.com/python/cpython/issues/100708">View on GitHub</a>
<p>Labels: type-bug</p>
<p>Assignee: </p>