Graph.creation_operator(dimension, offset=0, *, name=None)

Create a creation operator in the truncated Fock space.


  • dimension (int) – The size of the state representation in the truncated Fock space. By default, the Fock space is truncated at [0, dimension). If non-zero offset is passed, the space is then truncated at [offset, dimension + offset).
  • offset (int , optional) – The lowest level of Fock state in the representation. Defaults to 0.
  • name (str or None , optional) – The name of the node.


A 2D tensor representing the creation operator.

Return type



Graph.annihilation_operator : Create an annihilation operator in the truncated Fock space.

Graph.coherent_state : Create a coherent state (or a batch of them).

Graph.fock_state : Create a Fock state (or a batch of them).

Graph.number_operator : Create a number operator in the truncated Fock space.


Generate a creation operator for a two-level system.

>>> graph.creation_operator(2, name="adagger")
<Tensor: name="adagger", operation_name="creation_operator", shape=(2, 2)>
>>> result = bo.execute_graph(graph=graph, output_node_names="adagger")
>>> result["output"]["adagger"]["value"]
array([[0.+0.j, 0.+0.j],
    [1.+0.j, 0.+0.j]])

Apply a creation operator on the ground state such that a0=1a^\dagger|0\rangle = |1\rangle

>>> adagger = graph.creation_operator(2)
>>> state = adagger @ graph.fock_state(2, 0)[:, None]
>>> = "state"
>>> result = bo.execute_graph(graph=graph, output_node_names="state")
>>> result["output"]["state"]["value"]

Generate a creation operator for a three-level system with an offset.

>>> graph.creation_operator(3, 1, name="adagger_offset")
<Tensor: name="adagger_offset", operation_name="creation_operator", shape=(3, 3)>
>>> result = bo.execute_graph(graph=graph, output_node_names="adagger_offset")
>>> result["output"]["adagger_offset"]["value"]
array([[0.+0.j, 0.+0.j, 0.+0.j],
    [1.41421356+0.j, 0.+0.j, 0.+0.j],
    [0.+0.j, 1.73205081+0.j, 0.+0.j]])

Apply a creation operator with an offset such that a1=22a^\dagger|1\rangle = \sqrt{2}|2\rangle

>>> adagger_offset = graph.creation_operator(3, 1)
>>> state_offset = adagger_offset @ graph.fock_state(3, 1, 1)[:, None]
>>> = "offset"
>>> result = bo.execute_graph(graph=graph, output_node_names="offset")
>>> result["output"]["offset"]["value"]
array([[0.        +0.j],
    [0.        +0.j]])

Was this useful?