| import unittest |
|
|
| from quread.layout_mapper import parse_layout_csv_text |
|
|
|
|
| class LayoutMapperTest(unittest.TestCase): |
| def test_parse_layout_csv_uses_uploaded_values_and_fallback(self): |
| csv_text = "\n".join( |
| [ |
| "qubit,row,col", |
| "0,1,1", |
| "1,0,1", |
| "1,1,0", |
| "3,9,0", |
| "bad,0,0", |
| ] |
| ) |
|
|
| coords, meta = parse_layout_csv_text(csv_text, n_qubits=4, rows=2, cols=2) |
|
|
| self.assertEqual(coords[0], (1, 1)) |
| self.assertEqual(coords[1], (1, 0)) |
| self.assertEqual(coords[2], (1, 0)) |
| self.assertEqual(coords[3], (1, 1)) |
| self.assertEqual(meta["source"], "uploaded") |
| self.assertEqual(int(meta["parsed_rows"]), 5) |
| self.assertEqual(int(meta["mapped"]), 2) |
| self.assertEqual(int(meta["fallback"]), 2) |
| self.assertEqual(int(meta["skipped"]), 2) |
| self.assertEqual(int(meta["duplicates"]), 1) |
|
|
| def test_parse_layout_csv_accepts_alias_headers(self): |
| csv_text = "\n".join( |
| [ |
| "q,r,c", |
| "0,1,1", |
| ] |
| ) |
| coords, meta = parse_layout_csv_text(csv_text, n_qubits=2, rows=2, cols=2) |
| self.assertEqual(coords[0], (1, 1)) |
| self.assertEqual(meta["source"], "uploaded") |
| self.assertEqual(int(meta["mapped"]), 1) |
|
|
| def test_empty_layout_csv_returns_default_mapping(self): |
| coords, meta = parse_layout_csv_text("", n_qubits=3, rows=2, cols=2) |
| self.assertEqual(meta["source"], "default") |
| self.assertEqual(int(meta["mapped"]), 3) |
| self.assertEqual(coords[0], (0, 0)) |
| self.assertEqual(coords[1], (0, 1)) |
| self.assertEqual(coords[2], (1, 0)) |
|
|
|
|
| if __name__ == "__main__": |
| unittest.main() |
|
|