mirror of
https://github.com/YosysHQ/yosys
synced 2025-10-09 17:31:59 +00:00
- 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
31 lines
887 B
Python
31 lines
887 B
Python
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"
|