JuliaPy / JuliaPy/PythonCall.jl
Julia objects are falsely marked as subtypes of most Python abstract base classes.
- Langage dominant
- Julia
- Étoiles
- 1.1k
- Forks
- 86
- Merge moyen
- 1 j 22 h
- PR mergées (30 j)
- 3
Description
**Affects:** JuliaCall
**Describe the bug**
An example of this that I ran into is that everything is reported as itterable, even when it cannot be iterated.
This looks pretty bad on the surface:
```pycon
>>> import collections
>>> isinstance([1,2,3], collections.abc.Iterable)
True
>>> isinstance(1, collections.abc.Iterable)
False
>>> isinstance(sum, collections.abc.Iterable)
False
>>> f = jl.seval("f(x) = x+1")
>>> isinstance(f, collections.abc.Iterable)
True
>>> s = jl.seval(":a")
>>> isinstance(s, collections.abc.Iterable)
True
>>> f
Julia: f (generic function with 1 method)
>>> s
Julia: :a
```
And indeed it causes bugs when passing non-iterable Julia objects to Python functions which check for iterability and then, if iterable, iterate. For example, this function in PyTorch:
https://github.com/pytorch/pytorch/blob/185e76238d9f634c9c8d6fc6be75aa4fc71e04d3/torch/autograd/gradcheck.py#L78-L87
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Piste de recherche
Start by reproducing the isinstance examples from the issue in PythonCall.jl, including the Julia function and Symbol cases, then trace how Julia objects interact with collections.abc.Iterable checks. Done means genuinely non-iterable Julia objects are no longer reported as Iterable and the cited PyTorch gradcheck scenario behaves correctly.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- julia, python
- Domaine
- api
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 35/100