Missed TensorFlow Dev Summit? Check out the video playlist. Watch recordings


View source on GitHub

Get a Tensorflow op that produces samples from given quantum circuits.


This function produces a non-differentiable op that will calculate batches of circuit samples given tensor batches of cirq.Circuits, parameter values, and a scalar telling the op how many samples to take.

# Simulate circuits with cirq. 
my_op = tfq.get_sampling_op(backend=cirq.sim.Simulator()) 
# Simulate circuits with C++. 
my_second_op = tfq.get_sampling_op() 
# Prepare some inputs. 
qubit = cirq.GridQubit(0, 0) 
my_symbol = sympy.Symbol('alpha') 
my_circuit_tensor = tfq.convert_to_tensor( 
my_values = np.array([[2.0]]) 
n_samples = np.array([10]) 
# This op can now be run to take samples. 
output = my_second_op( 
    my_circuit_tensor, ['alpha'], my_values, n_samples) 
<tf.RaggedTensor [[[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]]> 


  • backend: Optional Python object that specifies what backend this op should use when evaluating circuits. Can be any cirq.Sampler. If not provided the default C++ sampling op is returned.


A callable with the following signature:

  • programs: tf.Tensor of strings with shape [batch_size] containing the string representations of the circuits to be executed.
  • symbol_names: tf.Tensor of strings with shape [n_params], which is used to specify the order in which the values in symbol_values should be placed inside of the circuits in programs.
  • symbol_values: tf.Tensor of real numbers with shape [batch_size, n_params] specifying parameter values to resolve into the circuits specified by programs, following the ordering dictated by symbol_names.
  • num_samples: tf.Tensor with one element indicating the number of samples to draw.

  • Returns: tf.Tensor with shape [batch_size, num_samples, n_qubits] that holds samples (as boolean values) for each circuit.