# hermitian_part

Graph.hermitian_part(x, *, name=None)

Calculate the Hermitian part of an object. This can be an array, a tensor, or a time-dependent function in the form of a Pwc or an Stf where values have at least two dimensions. The operation is applied on the last two dimensions, which must be equal to each other.

### Parameters

• x (np.ndarray or Tensor or Pwc or Stf) – The object whose Hermitian part you want to calculate, $\mathop{x}$
• name (str or None , optional) – The name of the node. You can only provide a name if the object is not an Stf.

### Returns

The Hermitian part of the matrix or matrix-valued function, $\frac{1}{2}(\mathop{x}+\mathop{x}^\dagger)$

### Return type

Tensor or Pwc or Stf

Graph.adjoint : Hermitian adjoint of an operator.

## Examples

Create a Hamiltonian from a non-Hermitian Pwc operator.

>>> omega = graph.pwc(durations=np.array([0.5, 0.7]), values=np.array([0.2, 0.4]))
>>> sigma_m = np.array([[0, 1], [0, 0]])
>>> operator = omega * sigma_m
>>> graph.hermitian_part(operator, name="hamiltonian")
<Pwc: name="hamiltonian", operation_name="hermitian_part", value_shape=(2, 2), batch_shape=()>
>>> result = bo.execute_graph(graph=graph, output_node_names="hamiltonian")
>>> result["output"]["hamiltonian"]
{
'durations': array([0.5, 0.7]),
'values': array([
[[0. , 0.1], [0.1, 0. ]],
[[0. , 0.2], [0.2, 0. ]]
]),
'time_dimension': 0
}

See more examples in the Simulate the dynamics of a single qubit using computational graphs tutorial.

Create a Hamiltonian from a non-Hermitian Stf operator.

>>> operator = stf_signal * np.array([[0, 1, 0], [0, 0, np.sqrt(2)], [0, 0, 0]])
>>> hamiltonian = graph.hermitian_part(operator)
>>> hamiltonian
<Stf: operation_name="hermitian_part", value_shape=(3, 3), batch_shape=()>

Create a Hermitian matrix from a non-Hermitian np.ndarray.

>>> sigma_m = np.array([[0, 1], [0, 0]])
>>> graph.hermitian_part(sigma_m, name="hamiltonian")
<Tensor: name="hamiltonian", operation_name="hermitian_part", shape=(2, 2)>
>>> result = bo.execute_graph(graph=graph, output_node_names="hamiltonian")
>>> result["output"]["hamiltonian"]
{'value': array([[0. , 0.5], [0.5, 0. ]])}