-
Notifications
You must be signed in to change notification settings - Fork 46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improve the code completion for python scene. #417
Comments
Here is a small summary of the process
To improve part 1, the c++ binding code must be changed so it is more "narrow" on the input & output types of function. This can be done function by function once the part1 has been integrated in the packaging process of SofaPython3. To improve part 2, The code generation for part 2 is drafted in this branch: https://github.com/SofaDefrost/SofaComponents/tree/xp-component-stubgen |
I tried mymy's stubgen and pybind11-stubgen. A first sight the latter produce better stubs...except it does not handle python's 3.12 feature for type generic. |
I made a long presentation to the DEFROST research team about code completion for SOFA. The video is available at this address: https://youtu.be/tnrAkEd7unI |
Currently code completion on our binding is very poor.
This is connected to several issues that are explained later.
To see our progress here we are:
Add type hints stubs for our binary modules
To correct this we simply need to automatically generate the typehints stub using a generation tools (eg: stubgen installed from MyMY )
To generate the typehint for the python module named "Sofa" you can simply do:
#> stubgen -p Sofa --include-docstrings --inspect-mode
This is produce a set of files with extension ".pyi" in the "out" directory. You can then simply copy the files into the python module "Sofa".
FIx bad c++ function signature
When the typehints are generated their quality depend on how "rich' the type informations have been deduced from the c++ signature. When the c++ signature of a binded function is too vague to provide interesting completion (eg: py::object) we need to improve that by enriching the c++ binding.
The most common case for method that takes
py::object
as parameter orpy::object
as return type. To correct this we need to refined the type.API design favoring code completion
The current Sofa API does not allow to get good insight on the type of manipulated object. In the following example,
the best the API allows is to infer that object1 is of type "Sofa.Core.Object". So there is no completion related to MechanicalObject.
To help the type inference we need to expose rich types in python for the sofa scene objects. This was done for example in the Sofa.Component plugins.
This may requires redesigning the SofaPython3 to make that very shiny.
Here is a small vidéo showing how code completion could work
https://www.youtube.com/watch?v=9ZTAcT-1C30
The text was updated successfully, but these errors were encountered: