Skip to content

Conversation

ilevkivskyi
Copy link
Member

This gives around 5% perf boost for interpreted mypy (on self-check), but only 1.5-2% for compiled one. Note this is not a no-op, this is a faster (and IMO actually more correct) inference passes logic.

Btw, for more generics-rich code the savings may be bigger, e.g. mypy -c "import colours" becomes 30% faster (compiled).

Copy link
Contributor

Diff from mypy_primer, showing the effect of this PR on open source code:

freqtrade (https://github.com/freqtrade/freqtrade) - freqtrade/templates/FreqaiExampleStrategy.py:245: error: Unsupported left operand type for & ("tuple[Index[Any] | Series[builtins.bool] | ndarray[tuple[Any, ...], dtype[numpy.bool[builtins.bool]]] | list[builtins.bool] | str | <18 more items>, ...]") [operator] + freqtrade/templates/FreqaiExampleStrategy.py:245: error: Unsupported left operand type for & ("tuple[Index[Any] | Series[builtins.bool] | ndarray[tuple[Any, ...], dtype[numpy.bool[builtins.bool]]] | list[builtins.bool] | str | bytes | date | datetime | timedelta | <7 more items> | complex | integer[Any] | floating[Any] | complexfloating[Any, Any] | list[Any] | slice[Any, Any, Any] | tuple[str | bytes | date | datetime | timedelta | <7 more items> | complex | integer[Any] | floating[Any] | complexfloating[Any, Any], ...], ...]") [operator] - freqtrade/templates/FreqaiExampleStrategy.py:255: error: Unsupported left operand type for & ("tuple[Index[Any] | Series[builtins.bool] | ndarray[tuple[Any, ...], dtype[numpy.bool[builtins.bool]]] | list[builtins.bool] | str | <18 more items>, ...]") [operator] + freqtrade/templates/FreqaiExampleStrategy.py:255: error: Unsupported left operand type for & ("tuple[Index[Any] | Series[builtins.bool] | ndarray[tuple[Any, ...], dtype[numpy.bool[builtins.bool]]] | list[builtins.bool] | str | bytes | date | datetime | timedelta | <7 more items> | complex | integer[Any] | floating[Any] | complexfloating[Any, Any] | list[Any] | slice[Any, Any, Any] | tuple[str | bytes | date | datetime | timedelta | <7 more items> | complex | integer[Any] | floating[Any] | complexfloating[Any, Any], ...], ...]") [operator] 
@ilevkivskyi
Copy link
Member Author

Not sure what exactly happened with union formatting in freqtrade, it looks like a union is not flattened in some code path. I don't think it is something to worry about.

In the positive news, I see very good results in terms of performance in mypy_primer, many libraries become 10-30% faster.

Copy link
Collaborator

@hauntsaninja hauntsaninja left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! And yeah, looks like colour-science interpreted is 1.5x faster in primer

@ilevkivskyi ilevkivskyi merged commit a56adc8 into python:master Jul 25, 2025
20 checks passed
@ilevkivskyi ilevkivskyi deleted the faster-generics branch July 25, 2025 08:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants