`x *= seq` raises TypeError for int subclasses and IntEnum where `x * seq` works
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 1-2 jours
- Accessibilité débutants
- 25/100
Piste de recherche
Start with PyNumber_InPlaceMultiply in Objects/abstract.c and compare its handling of the right operand's sq_repeat with PyNumber_Multiply. Find the relevant existing numeric or sequence-operation tests; the issue does not name a test file. Done means in-place multiplication matches ordinary multiplication for the reported int subclass and IntEnum cases, with tests passing.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Bug report
When the left operand is an instance of a Python class that supports __index__ but has no __mul__/__imul__ that handles sequences (an int subclass, an IntEnum member, or any class with __index__), x *= [1] raises TypeError, while x * [1] and x = x * [1] work. With a plain int on the left it works.
import enum, operator
class MyInt(int):
pass
class Number(enum.IntEnum):
TWO = 2
x = MyInt(2)
print(x * [1]) # [1, 1]
x *= [1] # TypeError: unsupported operand type(s) for *=: 'MyInt' and 'list'
y = Number.TWO
y *= [1] # TypeError: unsupported operand type(s) for *=: 'Number' and 'list'
operator.imul(MyInt(2), [1]) # same TypeError
Expected: [1, 1] in each case, the same as x * [1].
The cause is in PyNumber_InPlaceMultiply (Objects/abstract.c): the right operand's sq_repeat is only tried in an else if (mw != NULL) branch, which is skipped whenever the left operand's type has a tp_as_sequence at all, even if that has no repeat slot. Every heap type has tp_as_sequence, so for these classes the list's repeat is never reached. PyNumber_Multiply does not have this problem because it checks the right operand independently.
CPython versions tested on:
3.15, CPython main branch
Operating systems tested on:
Linux
Found while building a Lean 4 model of CPython (https://broyojo.com/python-formalization/). AI tools (Claude) helped investigate the findings and prepare this report. The examples were rerun on CPython 3.15.2 and main, and the report received technical review. Record: corelibs-inplace-mul-heap-left
Linked PRs
- gh-161969
- Langage dominant
- Python
- Étoiles
- 78.2k
- Forks
- 36.6k
- Merge moyen
- 19 h 57 min
- PR mergées (30 j)
- 630
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de python/cpython
-
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 1 jour
-
stdlib type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour
-
extension-modules stdlib topic-XML type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
python/cpython#161807 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
stdlib type-feature
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
python/cpython#161788 · 7 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
extension-modules topic-IO type-bug
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de python/cpython
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
cpp-best-practices/project_validator#267 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Project-N-E-K-O/N.E.K.O#3725 ·
Les mainteneurs répondent en général sous 1 jour
-
[Bug] Sending a Telegram message chain twice duplicates mentionsPeut-être pris @123XieC l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
AstrBotDevs/AstrBot#11125 ·
Les mainteneurs répondent en général sous 1 jour
-
backend bug priority: high
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
nooriegarg/ContribIQ#73 ·
Les mainteneurs répondent en général sous 1 jour
-
bug p3 security
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
amd/gaia#8197 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour