def test_symbol_values_type(self, symbol_type): """Tests all three ops for the different types. """ qubit = cirq.GridQubit(0, 0) circuits = util.convert_to_tensor([cirq.Circuit(cirq.H(qubit))]) symbol_names = ['symbol'] symbol_values = tf.convert_to_tensor([[1]], dtype=symbol_type) pauli_sums = util.random_pauli_sums([qubit], 3, 1) pauli_sums = util.convert_to_tensor([[x] for x in pauli_sums]) result = tfq_simulate_ops.tfq_simulate_state(circuits, symbol_names, symbol_values) self.assertDTypeEqual(result, np.complex64) result = tfq_simulate_ops.tfq_simulate_expectation( circuits, symbol_names, symbol_values, pauli_sums) self.assertDTypeEqual(result, np.float32) result = tfq_simulate_ops.tfq_simulate_samples(circuits, symbol_names, symbol_values, [100]) self.assertDTypeEqual(result, np.int8)
def test_simulate_samples_inputs(self): """Make sure the sample op fails gracefully on bad inputs.""" n_qubits = 5 batch_size = 5 num_samples = 10 symbol_names = ['alpha'] qubits = cirq.GridQubit.rect(1, n_qubits) circuit_batch, resolver_batch = \ util.random_symbol_circuit_resolver_batch( qubits, symbol_names, batch_size) symbol_values_array = np.array( [[resolver[symbol] for symbol in symbol_names] for resolver in resolver_batch]) with self.assertRaisesRegex(ValueError, 'rank 1 but is rank 2'): # programs tensor has the wrong shape. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor([circuit_batch]), symbol_names, symbol_values_array, [num_samples]) with self.assertRaisesRegex(ValueError, 'rank 1 but is rank 2'): # symbol_names tensor has the wrong shape. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), np.array([symbol_names]), symbol_values_array, [num_samples]) with self.assertRaisesRegex(ValueError, 'rank 2 but is rank 3'): # symbol_values tensor has the wrong shape. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), symbol_names, np.array([symbol_values_array]), [num_samples]) with self.assertRaisesRegex(ValueError, 'rank 2 but is rank 1'): # symbol_values tensor has the wrong shape 2. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), symbol_names, symbol_values_array[0], [num_samples]) with self.assertRaisesRegex(ValueError, 'rank 0 but is rank 1'): # num_samples tensor has the wrong shape. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), symbol_names, symbol_values_array, [[num_samples]]) with self.assertRaisesRegex(tf.errors.InvalidArgumentError, 'Unparseable proto'): # programs tensor has the right type, but invalid value. tfq_simulate_ops.tfq_simulate_samples(['junk'] * batch_size, symbol_names, symbol_values_array, [num_samples]) with self.assertRaisesRegex(tf.errors.InvalidArgumentError, 'Could not find symbol in parameter map'): # symbol_names tensor has the right type, but invalid value. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), ['junk'], symbol_values_array, [num_samples]) with self.assertRaisesRegex(TypeError, 'Expected string'): # programs tensor has the wrong type. tfq_simulate_ops.tfq_simulate_samples([1] * batch_size, symbol_names, symbol_values_array, [num_samples]) with self.assertRaisesRegex(TypeError, 'Expected string'): # programs tensor has the wrong type. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), [1], symbol_values_array, [num_samples]) with self.assertRaisesRegex(tf.errors.UnimplementedError, 'Cast string to float is not supported'): # programs tensor has the wrong type. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), symbol_names, [['junk']] * batch_size, [num_samples]) with self.assertRaisesRegex(Exception, 'not supported'): # num_samples tensor has the wrong shape. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), symbol_names, symbol_values_array, ['junk']) with self.assertRaisesRegex(TypeError, 'missing'): # too few tensors. # pylint: disable=no-value-for-parameter tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), symbol_names, symbol_values_array)
def test_simulate_samples_inputs(self): """Make sure the sample op fails gracefully on bad inputs.""" n_qubits = 5 batch_size = 5 num_samples = 10 symbol_names = ['alpha'] qubits = cirq.GridQubit.rect(1, n_qubits) circuit_batch, resolver_batch = \ util.random_symbol_circuit_resolver_batch( qubits, symbol_names, batch_size) symbol_values_array = np.array( [[resolver[symbol] for symbol in symbol_names] for resolver in resolver_batch]) with self.assertRaisesRegex(tf.errors.InvalidArgumentError, 'rank 1. Got rank 2'): # programs tensor has the wrong shape. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor([circuit_batch]), symbol_names, symbol_values_array, [num_samples]) with self.assertRaisesRegex(tf.errors.InvalidArgumentError, 'rank 1. Got rank 2'): # symbol_names tensor has the wrong shape. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), np.array([symbol_names]), symbol_values_array, [num_samples]) with self.assertRaisesRegex(tf.errors.InvalidArgumentError, 'rank 2. Got rank 3'): # symbol_values tensor has the wrong shape. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), symbol_names, np.array([symbol_values_array]), [num_samples]) with self.assertRaisesRegex(tf.errors.InvalidArgumentError, 'rank 2. Got rank 1'): # symbol_values tensor has the wrong shape 2. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), symbol_names, symbol_values_array[0], [num_samples]) with self.assertRaisesRegex(tf.errors.InvalidArgumentError, 'rank 1. Got rank 2'): # num_samples tensor has the wrong shape. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), symbol_names, symbol_values_array, [[num_samples]]) with self.assertRaisesRegex(tf.errors.InvalidArgumentError, 'Unparseable proto'): # programs tensor has the right type, but invalid value. tfq_simulate_ops.tfq_simulate_samples(['junk'] * batch_size, symbol_names, symbol_values_array, [num_samples]) with self.assertRaisesRegex(tf.errors.InvalidArgumentError, 'Could not find symbol in parameter map'): # symbol_names tensor has the right type, but invalid value. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), ['junk'], symbol_values_array, [num_samples]) with self.assertRaisesRegex(TypeError, 'Cannot convert'): # programs tensor has the wrong type. tfq_simulate_ops.tfq_simulate_samples([1] * batch_size, symbol_names, symbol_values_array, [num_samples]) with self.assertRaisesRegex(TypeError, 'Cannot convert'): # programs tensor has the wrong type. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), [1], symbol_values_array, [num_samples]) with self.assertRaisesRegex(tf.errors.UnimplementedError, 'Cast string to float is not supported'): # programs tensor has the wrong type. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), symbol_names, [['junk']] * batch_size, [num_samples]) with self.assertRaisesRegex(Exception, 'junk'): # num_samples tensor has the wrong shape. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), symbol_names, symbol_values_array, ['junk']) with self.assertRaisesRegex(TypeError, 'missing'): # too few tensors. # pylint: disable=no-value-for-parameter tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), symbol_names, symbol_values_array) # pylint: enable=no-value-for-parameter with self.assertRaisesRegex(tf.errors.InvalidArgumentError, expected_regex='do not match'): # wrong symbol_values size. tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor(circuit_batch), symbol_names, symbol_values_array[:int(batch_size * 0.5)], num_samples) with self.assertRaisesRegex(tf.errors.InvalidArgumentError, expected_regex='cirq.Channel'): # attempting to use noisy circuit. noisy_circuit = cirq.Circuit(cirq.depolarize(0.3).on_each(*qubits)) tfq_simulate_ops.tfq_simulate_samples( util.convert_to_tensor([noisy_circuit for _ in circuit_batch]), symbol_names, symbol_values_array, [num_samples])