Skip to content

Commit 12b7fac

Browse files
committed
review comments
- additional test if litinski is noop - update test names - remove some idle code
1 parent c2e32dd commit 12b7fac

2 files changed

Lines changed: 46 additions & 16 deletions

File tree

crates/cext/src/transpiler/passes/litinski_transformation.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,9 @@ pub unsafe extern "C" fn qk_transpiler_pass_standalone_litinski_transformation(
3838
) {
3939
// SAFETY: The user guarantees the pointer is safe to read.
4040
let circuit = unsafe { mut_ptr_as_ref(circuit) };
41-
let dag = match DAGCircuit::from_circuit_data(circuit, false, None, None, None, None) {
42-
Ok(dag) => dag,
43-
Err(_) => panic!("Internal Circuit -> DAG conversion failed"),
44-
};
45-
// TODO: Potentially propagate exit code to the user
41+
let dag = DAGCircuit::from_circuit_data(circuit, false, None, None, None, None)
42+
.expect("Internal Circuit -> DAG conversion failed");
43+
4644
let maybe_out = run_litinski_transformation(&dag, fix_clifford, false, true)
4745
.expect("Failed running Litinski transformation");
4846
// If a DAG is returned, the circuit has been modified. Else just leave it as is.

test/c/test_pbc.c

Lines changed: 43 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
/**
2424
* Test gate counts after Litinski transformation.
2525
*/
26-
static int test_counts(void) {
26+
static int test_counts_litinski(void) {
2727
QkCircuit *circuit = qk_circuit_new(4, 0);
2828
qk_circuit_gate(circuit, QkGate_H, (uint32_t[1]){0}, NULL);
2929
qk_circuit_gate(circuit, QkGate_CX, (uint32_t[2]){0, 1}, NULL);
@@ -50,6 +50,7 @@ static int test_counts(void) {
5050
}
5151
}
5252
}
53+
qk_opcounts_clear(&op_counts);
5354
cleanup:
5455
qk_circuit_free(circuit);
5556
return result;
@@ -58,7 +59,7 @@ static int test_counts(void) {
5859
/**
5960
* Test gate counts after converting to Pauli rotations.
6061
*/
61-
static int test_counts_pauli_rotations(void) {
62+
static int test_counts_convert_to_pauli_rotations(void) {
6263
QkCircuit *circuit = qk_circuit_new(4, 2);
6364
qk_circuit_gate(circuit, QkGate_H, (uint32_t[1]){0}, NULL); // 2 PPR gates
6465
qk_circuit_gate(circuit, QkGate_CX, (uint32_t[2]){0, 1}, NULL); // 3 PPR gates
@@ -194,6 +195,9 @@ int check_pauli_rotation(QkCircuit *circuit, size_t index, enum Pauli *paulis, u
194195
return result;
195196
}
196197

198+
/**
199+
* A helper to check a PPM matches the expectation.
200+
*/
197201
int check_pauli_measurement(QkCircuit *circuit, size_t index, enum Pauli *paulis, uint32_t *qubits,
198202
const size_t len, uint32_t clbit, bool flip_outcome) {
199203
QkPauliProductMeasurement ppm;
@@ -243,7 +247,7 @@ int check_pauli_measurement(QkCircuit *circuit, size_t index, enum Pauli *paulis
243247
/**
244248
* Test concrete circuit after running the Litinski transformation.
245249
*/
246-
static int test_concrete(void) {
250+
static int test_concrete_litinski(void) {
247251
QkCircuit *circuit = qk_circuit_new(4, 4);
248252
qk_circuit_gate(circuit, QkGate_T, (uint32_t[1]){0}, NULL);
249253
qk_circuit_gate(circuit, QkGate_CX, (uint32_t[2]){2, 1}, NULL);
@@ -304,17 +308,14 @@ static int test_concrete(void) {
304308
/**
305309
* Test concrete circuit after running conversion to Pauli rotations.
306310
*/
307-
static int test_concrete_pauli_rotations(void) {
311+
static int test_concrete_convert_to_pauli_rotations(void) {
308312
QkCircuit *circuit = qk_circuit_new(4, 1);
309313
qk_circuit_gate(circuit, QkGate_T, (uint32_t[1]){0}, NULL);
310314
qk_circuit_gate(circuit, QkGate_H, (uint32_t[2]){1}, NULL);
311315
qk_circuit_gate(circuit, QkGate_RXX, (uint32_t[2]){2, 3}, (double[1]){1.0});
312316
qk_circuit_gate(circuit, QkGate_SXdg, (uint32_t[1]){3}, NULL);
313317
qk_circuit_measure(circuit, 0, 0);
314318

315-
for (uint32_t i = 0; i < 4; i++) {
316-
}
317-
318319
qk_transpiler_pass_standalone_convert_to_pauli_rotations(circuit);
319320

320321
int result = Ok;
@@ -341,13 +342,44 @@ static int test_concrete_pauli_rotations(void) {
341342
qk_circuit_free(circuit);
342343
return result;
343344
}
345+
346+
/**
347+
* Test Litinski not doing anything.
348+
*/
349+
static int test_litinski_noop(void) {
350+
QkCircuit *circuit = qk_circuit_new(1, 0);
351+
qk_circuit_gate(circuit, QkGate_H, (uint32_t[1]){0}, NULL);
352+
353+
qk_transpiler_pass_standalone_litinski_transformation(circuit, true);
354+
355+
int result = Ok;
356+
if (qk_circuit_num_instructions(circuit) != 1) {
357+
printf("Expected 1 instructions, but found %zu", qk_circuit_num_instructions(circuit));
358+
result = EqualityError;
359+
goto cleanup;
360+
}
361+
362+
QkCircuitInstruction inst;
363+
qk_circuit_get_instruction(circuit, 0, &inst);
364+
if (strcmp(inst.name, "h") != 0) {
365+
printf("Instruction at index 0 should be 'h' but is '%s'", inst.name);
366+
result = EqualityError;
367+
}
368+
qk_circuit_instruction_clear(&inst);
369+
370+
cleanup:
371+
qk_circuit_free(circuit);
372+
return result;
373+
}
374+
344375
int test_pbc(void) {
345376
int num_failed = 0;
346377

347-
num_failed += RUN_TEST(test_counts);
348-
num_failed += RUN_TEST(test_counts_pauli_rotations);
349-
num_failed += RUN_TEST(test_concrete);
350-
num_failed += RUN_TEST(test_concrete_pauli_rotations);
378+
num_failed += RUN_TEST(test_counts_litinski);
379+
num_failed += RUN_TEST(test_counts_convert_to_pauli_rotations);
380+
num_failed += RUN_TEST(test_concrete_litinski);
381+
num_failed += RUN_TEST(test_concrete_convert_to_pauli_rotations);
382+
num_failed += RUN_TEST(test_litinski_noop);
351383

352384
fflush(stderr);
353385
fprintf(stderr, "=== Number of failed subtests (PBC transformations): %i\n", num_failed);

0 commit comments

Comments
 (0)