---
title: assembler (v0.46)
description: API reference for qiskit.assembler in qiskit v0.46
source: https://eu-de.quantum.cloud.ibm.com/docs/en/api/qiskit/0.46/assembler
---

# Circuit and Schedule Assembler

`qiskit.assembler`

## Circuit Assembler

### assemble\_circuits

`qiskit.assembler.assemble_circuits(circuits, run_config, qobj_id, qobj_header)`

[GitHub](https://github.com/qiskit/qiskit/tree/stable/0.46/qiskit/assembler/assemble_circuits.py)

Assembles a list of circuits into a qobj that can be run on the backend.

**Parameters**

- **circuits** ([*List*](https://docs.python.org/3/library/typing.html#typing.List)*\[*[*QuantumCircuit*](/docs/api/qiskit/0.46/qiskit.circuit.QuantumCircuit "qiskit.circuit.quantumcircuit.QuantumCircuit")*]*) – circuit(s) to assemble
- **run\_config** ([*RunConfig*](/docs/api/qiskit/0.46/qiskit.assembler.RunConfig "qiskit.assembler.run_config.RunConfig")) – configuration of the runtime environment
- **qobj\_id** ([*int*](https://docs.python.org/3/library/functions.html#int)) – identifier for the generated qobj
- **qobj\_header** ([*QobjHeader*](/docs/api/qiskit/0.46/qiskit.qobj.QobjHeader "qiskit.qobj.common.QobjHeader")) – header to pass to the results

**Returns**

The qobj to be run on the backends

**Return type**

[*QasmQobj*](/docs/api/qiskit/0.46/qiskit.qobj.QasmQobj "qiskit.qobj.qasm_qobj.QasmQobj")

**Examples**

```python
from qiskit.circuit import QuantumRegister, ClassicalRegister, QuantumCircuit
from qiskit.assembler import assemble_circuits
from qiskit.assembler.run_config import RunConfig
# Build a circuit to convert into a Qobj
q = QuantumRegister(2)
c = ClassicalRegister(2)
qc = QuantumCircuit(q, c)
qc.h(q[0])
qc.cx(q[0], q[1])
qc.measure(q, c)
# Assemble a Qobj from the input circuit
qobj = assemble_circuits(circuits=[qc],
                         qobj_id="custom-id",
                         qobj_header=[],
                         run_config=RunConfig(shots=2000, memory=True, init_qubits=True))
```

## Schedule Assembler

### assemble\_schedules

`qiskit.assembler.assemble_schedules(schedules, qobj_id, qobj_header, run_config)`

[GitHub](https://github.com/qiskit/qiskit/tree/stable/0.46/qiskit/assembler/assemble_schedules.py)

Assembles a list of schedules into a qobj that can be run on the backend.

**Parameters**

- **schedules** ([*List*](https://docs.python.org/3/library/typing.html#typing.List)*\[*[*ScheduleBlock*](/docs/api/qiskit/0.46/qiskit.pulse.ScheduleBlock "qiskit.pulse.schedule.ScheduleBlock")  *|*[*Schedule*](/docs/api/qiskit/0.46/qiskit.pulse.Schedule "qiskit.pulse.schedule.Schedule")  *|*[*Instruction*](/docs/api/qiskit/0.46/pulse#qiskit.pulse.instructions.Instruction "qiskit.pulse.instructions.instruction.Instruction")  *|*[*Tuple*](https://docs.python.org/3/library/typing.html#typing.Tuple)*\[*[*int*](https://docs.python.org/3/library/functions.html#int)*,* [*Schedule*](/docs/api/qiskit/0.46/qiskit.pulse.Schedule "qiskit.pulse.schedule.Schedule")  *|*[*Instruction*](/docs/api/qiskit/0.46/pulse#qiskit.pulse.instructions.Instruction "qiskit.pulse.instructions.instruction.Instruction")*]]*) – Schedules to assemble.
- **qobj\_id** ([*int*](https://docs.python.org/3/library/functions.html#int)) – Identifier for the generated qobj.
- **qobj\_header** ([*QobjHeader*](/docs/api/qiskit/0.46/qiskit.qobj.QobjHeader "qiskit.qobj.common.QobjHeader")) – Header to pass to the results.
- **run\_config** ([*RunConfig*](/docs/api/qiskit/0.46/qiskit.assembler.RunConfig "qiskit.assembler.run_config.RunConfig")) – Configuration of the runtime environment.

**Returns**

The Qobj to be run on the backends.

**Raises**

[**QiskitError**](/docs/api/qiskit/0.46/exceptions#qiskit.exceptions.QiskitError "qiskit.exceptions.QiskitError") – when frequency settings are not supplied.

**Return type**

[*PulseQobj*](/docs/api/qiskit/0.46/qiskit.qobj.PulseQobj "qiskit.qobj.pulse_qobj.PulseQobj")

**Examples**

```python
from qiskit import pulse
from qiskit.assembler import assemble_schedules
from qiskit.assembler.run_config import RunConfig
# Construct a Qobj header for the output Qobj
header = {"backend_name": "FakeOpenPulse2Q", "backend_version": "0.0.0"}
# Build a configuration object for the output Qobj
config = RunConfig(shots=1024,
                   memory=False,
                   meas_level=1,
                   meas_return='avg',
                   memory_slot_size=100,
                   parametric_pulses=[],
                   init_qubits=True,
                   qubit_lo_freq=[4900000000.0, 5000000000.0],
                   meas_lo_freq=[6500000000.0, 6600000000.0],
                   schedule_los=[])
# Build a Pulse schedule to assemble into a Qobj
schedule = pulse.Schedule()
schedule += pulse.Play(pulse.Waveform([0.1] * 16, name="test0"),
                       pulse.DriveChannel(0),
                       name="test1")
schedule += pulse.Play(pulse.Waveform([0.1] * 16, name="test1"),
                       pulse.DriveChannel(0),
                       name="test2")
schedule += pulse.Play(pulse.Waveform([0.5] * 16, name="test0"),
                       pulse.DriveChannel(0),
                       name="test1")
# Assemble a Qobj from the schedule.
pulseQobj = assemble_schedules(schedules=[schedule],
                               qobj_id="custom-id",
                               qobj_header=header,
                               run_config=config)
```

## Disassembler

### disassemble

`qiskit.assembler.disassemble(qobj)`

[GitHub](https://github.com/qiskit/qiskit/tree/stable/0.46/qiskit/assembler/disassemble.py)

Disassemble a qobj and return the circuits or pulse schedules, run\_config, and user header.

> **Note**
>
> `disassemble(assemble(qc))` is not guaranteed to produce an exactly equal circuit to the input, due to limitations in the [`QasmQobj`](/docs/api/qiskit/0.46/qiskit.qobj.QasmQobj "qiskit.qobj.QasmQobj") format that need to be maintained for backend system compatibility. This is most likely to be the case when using newer features of [`QuantumCircuit`](/docs/api/qiskit/0.46/qiskit.circuit.QuantumCircuit "qiskit.circuit.QuantumCircuit"). In most cases, the output should be equivalent, if not quite equal.

**Parameters**

**qobj** (*Qobj*) – The input qobj object to disassemble

**Returns**

The disassembled program which consists of:

> - programs: A list of quantum circuits or pulse schedules
> - run\_config: The dict of the run config
> - user\_qobj\_header: The dict of any user headers in the qobj

**Return type**

Union\[CircuitModule, PulseModule]

**Examples**

```python
from qiskit.circuit import QuantumRegister, ClassicalRegister, QuantumCircuit
from qiskit.compiler.assembler import assemble
from qiskit.assembler.disassemble import disassemble
# Create a circuit to assemble into a qobj
q = QuantumRegister(2)
c = ClassicalRegister(2)
qc = QuantumCircuit(q, c)
qc.h(q[0])
qc.cx(q[0], q[1])
qc.measure(q, c)
# Assemble the circuit into a Qobj
qobj = assemble(qc, shots=2000, memory=True)
# Disassemble the qobj back into a circuit
circuits, run_config_out, headers = disassemble(qobj)
```

## RunConfig

|                                                                                                                                      |                              |
| ------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------- |
| [`RunConfig`](/docs/api/qiskit/0.46/qiskit.assembler.RunConfig "qiskit.assembler.RunConfig")(\[shots, seed\_simulator, memory, ...]) | Class for Run Configuration. |
