Skip to content

refactor: simplified and updated Python/PyZX bindings #106

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

Draft
wants to merge 20 commits into
base: master
Choose a base branch
from

Conversation

akissinger
Copy link
Member

This is a WiP, where I've been working on revamping the Python bindings. Currently, the bindings are a bit outdated and incomplete. They also "double wrap" the main rust classes. For example, VecGraph is wrapped in a PyO3 class written in rust, which in turn is wrapped in a subclass of BaseGraph written in python.

I originally did this to overcome a limitation in PyO3 that you can't extend classes written in python directly with rust bindings. However, this means you have to write twice as much boilerplate to extend the bindings, and you have to deal with this "double-wrapping" not only for graphs but any other rust functions or classes that consume graphs.

I think the simplest way around this is to just re-implement the helper methods provided by BaseGraph directly in rust (or throw "Not implemented" exceptions for those we don't care too much about), then "pretend" that the VecGraph wrapper class provided by the rust bindings extends BaseGraph, just by saying so in the mypy type stubs.

While I haven't tested this approach extensively, this will certainly do the right thing in code that relies on duck-typing, and should satisfy any python type checker.

@akissinger akissinger changed the title Simplified and updated Python/PyZX bindings refactor: simplified and updated Python/PyZX bindings Apr 8, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant