def test_sample_circuit_cirq(measure): circuit = cirq.Circuit( cirq.ops.H.on(cirq.LineQubit(0)), cirq.ops.CNOT.on(*cirq.LineQubit.range(2)), ) if measure: circuit.append(cirq.measure_each(*cirq.LineQubit.range(2))) h_rep = OperationRepresentation( ideal=circuit[:1], basis_expansion={ NoisyOperation.from_cirq(circuit=cirq.X): 0.6, NoisyOperation.from_cirq(circuit=cirq.Z): -0.6, }, ) cnot_rep = OperationRepresentation( ideal=circuit[1:2], basis_expansion={ NoisyOperation.from_cirq(circuit=cirq.CNOT): 0.7, NoisyOperation.from_cirq(circuit=cirq.CZ): -0.7, }, ) for _ in range(50): sampled_circuits, signs, norm = sample_circuit( circuit, representations=[h_rep, cnot_rep]) assert isinstance(sampled_circuits[0], cirq.Circuit) assert len(sampled_circuits[0]) == 2 assert signs[0] in (-1, 1) assert norm >= 1
def test_sample_sequence_cirq(): circuit = cirq.Circuit(cirq.H(cirq.LineQubit(0))) circuit.append(cirq.measure(cirq.LineQubit(0))) rep = OperationRepresentation( ideal=circuit, basis_expansion={ NoisyOperation.from_cirq(circuit=cirq.X): 0.5, NoisyOperation.from_cirq(circuit=cirq.Z): -0.5, }, ) for _ in range(5): seqs, signs, norm = sample_sequence(circuit, representations=[rep]) assert isinstance(seqs[0], cirq.Circuit) assert signs[0] in {1, -1} assert norm == 1.0
def test_sample_sequence_cirq_random_state(seed): circuit = cirq.Circuit(cirq.H.on(cirq.LineQubit(0))) rep = OperationRepresentation( ideal=circuit, basis_expansion={ NoisyOperation.from_cirq(circuit=cirq.X): 0.5, NoisyOperation.from_cirq(circuit=cirq.Z): -0.5, }, ) sequences, signs, norm = sample_sequence( circuit, [rep], random_state=np.random.RandomState(seed)) for _ in range(20): new_sequences, new_signs, new_norm = sample_sequence( circuit, [rep], random_state=np.random.RandomState(seed)) assert _equal(new_sequences[0], sequences[0]) assert new_signs[0] == signs[0] assert np.isclose(new_norm, norm)
def test_sample_circuit_with_seed(): circ = cirq.Circuit([cirq.X.on(cirq.LineQubit(0)) for _ in range(10)]) rep = OperationRepresentation( ideal=cirq.Circuit(cirq.X.on(cirq.LineQubit(0))), basis_expansion={ NoisyOperation.from_cirq(cirq.Z): 1.0, NoisyOperation.from_cirq(cirq.X): -1.0, }, ) expected_circuits, expected_signs, expected_norm = sample_circuit( circ, [rep], random_state=4) # Check we're not sampling the same operation every call to sample_sequence assert len(set(expected_circuits[0].all_operations())) > 1 for _ in range(10): sampled_circuits, sampled_signs, sampled_norm = sample_circuit( circ, [rep], random_state=4) assert _equal(sampled_circuits[0], expected_circuits[0]) assert sampled_signs[0] == expected_signs[0] assert sampled_norm == expected_norm
def test_sample_circuit_partial_representations(): circuit = cirq.Circuit( cirq.ops.H.on(cirq.LineQubit(0)), cirq.ops.CNOT.on(*cirq.LineQubit.range(2)), ) cnot_rep = OperationRepresentation( ideal=circuit[1:2], basis_expansion={ NoisyOperation.from_cirq(circuit=cirq.CNOT): 0.7, NoisyOperation.from_cirq(circuit=cirq.CZ): -0.7, }, ) for _ in range(10): with pytest.warns(UserWarning, match="No representation found for"): sampled_circuits, signs, norm = sample_circuit( circuit, representations=[cnot_rep]) assert isinstance(sampled_circuits[0], cirq.Circuit) assert len(sampled_circuits[0]) == 2 assert signs[0] in (-1, 1) assert norm >= 1