mirror of
https://github.com/YosysHQ/yosys
synced 2025-10-09 09:21:58 +00:00
pyosys: rewrite using pybind11
- Rewrite all Python features to use the pybind11 library instead of boost::python. Unlike boost::python, pybind11 is a header-only library that is just included by Pyosys code, saving a lot of compile time on wheels. - Factor out as much "translation" code from the generator into proper C++ files - Fix running the embedded interpreter not supporting "from pyosys import libyosys as ys" like wheels - Move Python-related elements to `pyosys` directory at the root of the repo - Slight shift in bridging semantics: - Containers are declared as "opaque types" and are passed by reference to Python - many methods have been implemented to make them feel right at home without the overhead/ambiguity of copying to Python and then copying back after mutation - Monitor/Pass use "trampoline" pattern to support virual methods overridable in Python: virtual methods no longer require `py_` prefix - Create really short test set for pyosys that just exercises basic functionality
This commit is contained in:
parent
f7120e9c2a
commit
88be728353
27 changed files with 2879 additions and 2674 deletions
31
tests/pyosys/test_idict.py
Normal file
31
tests/pyosys/test_idict.py
Normal file
|
@ -0,0 +1,31 @@
|
|||
from pyosys import libyosys as ys
|
||||
|
||||
my_idict = ys.IdstringIdict()
|
||||
print(my_idict(ys.IdString("\\hello")))
|
||||
print(my_idict(ys.IdString("\\world")))
|
||||
print(my_idict.get(ys.IdString("\\world")))
|
||||
try:
|
||||
print(my_idict.get(ys.IdString("\\dummy")))
|
||||
except IndexError as e:
|
||||
print(f"{repr(e)}")
|
||||
print(my_idict[0])
|
||||
print(my_idict[1])
|
||||
try:
|
||||
print(my_idict[2])
|
||||
except IndexError as e:
|
||||
print(f"{repr(e)}")
|
||||
|
||||
for i in my_idict:
|
||||
print(i)
|
||||
|
||||
current_len = len(my_idict)
|
||||
assert current_len == 2, "copy"
|
||||
|
||||
my_copy = my_idict.copy()
|
||||
my_copy(ys.IdString("\\copy"))
|
||||
assert len(my_idict) == current_len, "copy seemed to have mutate original idict"
|
||||
assert len(my_copy) == current_len + 1, "copy not behaving as expected"
|
||||
|
||||
current_copy_len = len(my_copy)
|
||||
my_copy |= (ys.IdString(e) for e in ("\\the", "\\world")) # 1 new element
|
||||
assert len(my_copy) == current_copy_len + 1, "or operator returned unexpected result"
|
Loading…
Add table
Add a link
Reference in a new issue