Graph.pwc_signal(values, duration, *, name=None)

Create a piecewise-constant signal (scalar-valued function of time).

Use this function to create a piecewise-constant signal in which the constant segments all have the same duration.


  • values (np.ndarray or Tensor) – The values {αn}\{\alpha_n\} of the NN constant segments. These can represent either a single sequence of segment values or a batch of them. To create a batch of B1××BnB_1 \times \ldots \times B_n signals, represent these values as a tensor of shape B1××Bn×NB_1 \times \ldots \times B_n \times N
  • duration (float) – The total duration τ\tau
  • name (str or None , optional) – The name of the node.


The piecewise-constant function of time α(t)\alpha(t), satisfying α(t)=αn\alpha(t)=\alpha_n for tn1ttnt_{n-1}\leq t\leq t_n, where tn=nτ/Nt_n=n\tau/N (where NN is the number of values in {αn}\{\alpha_n\}). If you provide a batch of values, the returned Pwc represents a corresponding batch of B1××BnB_1 \times \ldots \times B_n functions α(t)\alpha(t)

Return type



Graph.complex_pwc_signal : Create complex Pwc signals from their moduli and phases. : Corresponding operation with support for segments of different durations.

Graph.pwc_operator : Create Pwc operators.

Graph.pwc_sum : Sum multiple Pwcs.

Graph.symmetrize_pwc : Symmetrize Pwcs.


For more information on Pwc nodes see the Working with time-dependent functions in Boulder Opal topic.


Create a piecewise-constant signal with uniform segment duration.

>>> graph.pwc_signal(duration=0.1, values=np.array([2, 3]), name="signal")
<Pwc: name="signal", operation_name="pwc_signal", value_shape=(), batch_shape=()>
>>> result = bo.execute_graph(graph=graph, output_node_names="signal")
>>> result["output"]["signal"]
    'durations': array([0.05, 0.05]),
    'values': array([2., 3.]),
    'time_dimension': 0

See more examples in the Get familiar with graphs tutorial.

Was this useful?