Cleanup and fixes
diff --git a/libtrellis/src/PyTrellis.cpp b/libtrellis/src/PyTrellis.cpp index fa003fd..03e211f 100644 --- a/libtrellis/src/PyTrellis.cpp +++ b/libtrellis/src/PyTrellis.cpp
@@ -24,18 +24,17 @@ namespace py = pybind11; - typedef pair<int, int> IntPair; - typedef pair<string, bool> StringBoolPair; - typedef pair<RoutingId, ident_t> BelPin; - typedef pair<RoutingId, PortDirection> BelWireDir; +typedef pair<int, int> IntPair; +typedef pair<string, bool> StringBoolPair; +typedef pair<RoutingId, ident_t> BelPin; +typedef pair<RoutingId, PortDirection> BelWireDir; - // Common Types - PYBIND11_MAKE_OPAQUE(IntPair) - PYBIND11_MAKE_OPAQUE(LocationData) - PYBIND11_MAKE_OPAQUE(checksum_t) - PYBIND11_MAKE_OPAQUE(map<checksum_t, LocationData>) - PYBIND11_MAKE_OPAQUE(Location) - PYBIND11_MAKE_OPAQUE(std::set<RelId>) +// Common Types +PYBIND11_MAKE_OPAQUE(IntPair) +PYBIND11_MAKE_OPAQUE(LocationData) +PYBIND11_MAKE_OPAQUE(checksum_t) +PYBIND11_MAKE_OPAQUE(map<checksum_t, LocationData>) +PYBIND11_MAKE_OPAQUE(Location) PYBIND11_MODULE (pytrellis, m) { @@ -47,11 +46,9 @@ py::bind_vector<vector<bool>>(m, "BoolVector"); class_<IntPair>(m, "IntPair") - .def(init<IntPair>()) .def_readonly("first", &std::pair<int, int>::first) .def_readonly("second", &std::pair<int, int>::second); - m.def("make_IntPair", [](int first, int second) { return std::make_pair(first, second); }); @@ -75,7 +72,7 @@ .def("write_bit", &Bitstream::write_bit_py) .def_readwrite("metadata", &Bitstream::metadata) .def_readwrite("data", &Bitstream::data) - .def("deserialise_chip", static_cast<Chip (Bitstream::*)()>(&Bitstream::deserialise_chip)); + .def("deserialise_chip", static_cast<Chip (Bitstream::*)()>(&Bitstream::deserialise_chip)); class_<DeviceLocator>(m, "DeviceLocator") .def_readwrite("family", &DeviceLocator::family) @@ -259,8 +256,12 @@ m.def("cbit_from_str", cbit_from_str); py::bind_vector<vector<ConfigBit>>(m, "ConfigBitVector"); - class_<std::set<ConfigBit>>(m, "ConfigBitSet"); - + class_<std::set<ConfigBit>>(m, "ConfigBitSet") + .def("__len__", [](const std::set<ConfigBit> &v) { return v.size(); }) + .def("__iter__", [](std::set<ConfigBit> &v) { + return py::make_iterator(v.begin(), v.end()); + }, py::keep_alive<0, 1>()); /* Keep vector alive while iterator is used */ + class_<BitGroup>(m, "BitGroup") .def(init<const CRAMDelta &>()) .def_readwrite("bits", &BitGroup::bits)
diff --git a/util/common/tiles.py b/util/common/tiles.py index e64c9a1..4eed5e7 100644 --- a/util/common/tiles.py +++ b/util/common/tiles.py
@@ -6,8 +6,7 @@ """ Extract the tile position as a (row, column) tuple from its name """ - pair = pytrellis.make_IntPair(chip_size[0],chip_size[1]) - size = pytrellis.IntPair(pair) + size = pytrellis.make_IntPair(chip_size[0],chip_size[1]) pos = pytrellis.get_row_col_pair_from_chipsize(tile, size, bias) return int(pos.first), int(pos.second)