This is a first draft, discussion welcome
PySide needs to be more user-friendly when interfacing to other packages.
The most prominent example is NumPy, but it applies to other packages like SciPy, Pandas and MatPlotLib as well.
After looking into this issue, it appears to be a two-fold problem:
a) Many types support only List instead of allowing any sequence,
b) The error messages are extremely misleading and wrong.
There are many locations where PySide accepts a list only, although a sequence would be ok as well. That would allow for many new container types from NumPy, for instance.
This example says it uses a set, but it does not work:
The same with the function fromVector does of course not allow an arbitrary sequence.
but gives a very unintuitive error message.
I propose to either
- allow arbitrary sequences here, or
- add a new method fromSequence.
That would then work with any extension that uses the sequence protocol.
When trying to find negative examples for a), I stumbled surprisingly into examples for b). PySide already supports interfacing to other packages by using abstract protocols.
See the following example:
Here is the example that gives the impression that NumPy is not supported:
This problem seems to apply to the matrices, only. The error messages are very wrong, because the general sequence protocol is supported, but it says list. When you look at the file
instead, you see that it says sequence instead. But this is also still not completely correct, since the signature module needs more work on correct types, too.
My impression is that before adding a new sequence support that serves many extensions, we should try to
- improve error messages (re-write them using the signature module)
- write a tool that checks every function signature for functionality.
When that is working well enough that we can trust error messages, then we should think of new functionality.
Maybe the topic of this task needs to be changed?
|Support Pointer Primitive Types by Result Tuples||In Progress|
|For Gerrit Dashboard: PYSIDE-795|
|240540,30||Produce TypeError Messages Using the Signature Module||5.12||pyside/pyside-setup||Status: MERGED||-2||0|
|240861,6||Implement Different Signature Layouts||5.12||pyside/pyside-setup||Status: MERGED||+2||0|
|242242,3||Signature: Produce Correctly Nested Python Interfaces||5.12||pyside/pyside-setup||Status: MERGED||+2||0|
|242516,2||WIP: Produce TypeError Messages Using the Signature Module||dev||pyside/pyside-setup||Status: ABANDONED||-2||0|
|242721,19||Signature: Implement Nested Classes and Functions for Shiboken||5.12||pyside/pyside-setup||Status: MERGED||-2||0|
|251922,6||Type Hints: Handle Container Types Correctly||5.12||pyside/pyside-setup||Status: MERGED||+2||0|