|
4 | 4 | from functools import reduce |
5 | 5 | from itertools import combinations |
6 | 6 |
|
| 7 | +import networkx as nx |
7 | 8 | import numpy as np |
8 | 9 | import pytest |
9 | 10 | from scipy.optimize import curve_fit |
|
18 | 19 | dicke_state, |
19 | 20 | entangling_layer, |
20 | 21 | ghz_state, |
| 22 | + graph_state, |
21 | 23 | hamming_weight_encoder, |
22 | 24 | phase_encoder, |
23 | 25 | sparse_encoder, |
@@ -493,3 +495,61 @@ def test_dicke_state(backend, nqubits, weight, density_matrix): |
493 | 495 | target = backend.np.outer(target, backend.np.conj(target.T)) |
494 | 496 |
|
495 | 497 | backend.assert_allclose(state, target) |
| 498 | + |
| 499 | + |
| 500 | +@pytest.mark.parametrize( |
| 501 | + "matrix, expects_error, circuit1, circuit2", |
| 502 | + [ |
| 503 | + # Test Case 1: 3-qubit graph |
| 504 | + ([[0, 1, 0], [1, 0, 1], [0, 1, 0]], False, True, False), |
| 505 | + # Test Case 2: 5-qubit graph |
| 506 | + ( |
| 507 | + [ |
| 508 | + [0, 1, 0, 0, 1], |
| 509 | + [1, 0, 1, 0, 0], |
| 510 | + [0, 1, 0, 1, 0], |
| 511 | + [0, 0, 1, 0, 1], |
| 512 | + [1, 0, 0, 1, 0], |
| 513 | + ], |
| 514 | + False, |
| 515 | + False, |
| 516 | + True, |
| 517 | + ), |
| 518 | + # Test Case 3: Non-symmetric matrix (expected error) |
| 519 | + ( |
| 520 | + [[0, 1, 0], [0, 0, 1], [0, 1, 0]], |
| 521 | + True, |
| 522 | + False, |
| 523 | + False, |
| 524 | + ), # matrix[1,0] != matrix[0,1] |
| 525 | + # Test Case 4: Non-symmetric matrix (expected error) |
| 526 | + ([[0, 1], [0, 0]], True, False, False), # matrix[1,0] != matrix[0,1] |
| 527 | + ], |
| 528 | +) |
| 529 | +def test_graph_state(backend, matrix, expects_error, circuit1, circuit2): |
| 530 | + |
| 531 | + if expects_error: |
| 532 | + # We expect a ValueError for non-symmetric matrices |
| 533 | + with pytest.raises(ValueError): |
| 534 | + graph_state(matrix, backend=backend) |
| 535 | + |
| 536 | + else: |
| 537 | + if circuit1: |
| 538 | + nqubits = 3 |
| 539 | + target = Circuit(nqubits) |
| 540 | + target.add(gates.H(qubit) for qubit in range(nqubits)) |
| 541 | + target.add(gates.CZ(0, 1)) |
| 542 | + target.add(gates.CZ(1, 2)) |
| 543 | + |
| 544 | + if circuit2: |
| 545 | + nqubits = 5 |
| 546 | + target = Circuit(nqubits) |
| 547 | + target.add(gates.H(qubit) for qubit in range(nqubits)) |
| 548 | + target.add(gates.CZ(0, 1)) |
| 549 | + target.add(gates.CZ(0, 4)) |
| 550 | + target.add(gates.CZ(1, 2)) |
| 551 | + target.add(gates.CZ(2, 3)) |
| 552 | + target.add(gates.CZ(3, 4)) |
| 553 | + |
| 554 | + circuit = graph_state(matrix) |
| 555 | + backend.assert_circuitclose(circuit, target) |
0 commit comments