in tensorflow_quantum/python/layers/circuit_construction/elementary.py [0:0]
def call(self, inputs, *, append=None, prepend=None):
"""Keras call method.
Input options:
1. `inputs` can be a single `cirq.Circuit`, a Python `list` of
`cirq.Circuit`s or a pre-converted `tf.Tensor` of
`cirq.Circuit`s.
2. `append` can be a Python `list` of `cirq.Circuit`s or a
pre-converted `tf.Tensor` of type `str` (containing circuits).
3. `prepend` can be a Python `list` of `cirq.Circuit`s or a
pre-converted `tf.Tensor` of type `str` (containing circuits).
Output shape:
`tf.Tensor` of shape [input size] containing circuits with append
circuits appended or prepend circuits prepended.
"""
# inputs is circuit.
if append is None and prepend is None:
raise ValueError("Values must be provided for append or prepend.")
if append is not None and prepend is not None:
raise ValueError(
"Values cannot be given for both append and prepend.")
# Ingest input circuit(s).
if isinstance(inputs, cirq.Circuit):
inputs = util.convert_to_tensor([inputs])
if isinstance(inputs, (tuple, list, np.ndarray)):
inputs = util.convert_to_tensor(inputs)
if not tf.is_tensor(inputs):
raise TypeError("Circuits cannot be parsed with given input:"
" ".format(inputs))
batch_dim = tf.gather(tf.shape(inputs), 0)
# Ingest append circuit(s):
if append is not None:
if isinstance(append, cirq.Circuit):
append = tf.tile(util.convert_to_tensor([append]), [batch_dim])
if isinstance(append, (tuple, list, np.ndarray)):
append = util.convert_to_tensor(append)
if not tf.is_tensor(append):
raise TypeError(
"Append circuits cannot be parsed with given input:"
" ".format(append))
return tfq_utility_ops.append_circuit(inputs, append)
# Otherwise ingest prepend circuits.
if isinstance(prepend, cirq.Circuit):
prepend = tf.tile(util.convert_to_tensor([prepend]), [batch_dim])
if isinstance(prepend, (tuple, list, np.ndarray)):
prepend = util.convert_to_tensor(prepend)
if not tf.is_tensor(prepend):
raise TypeError(
"Prepend circuits cannot be parsed with given input:"
" ".format(prepend))
return tfq_utility_ops.append_circuit(prepend, inputs)