Reference
Syllabus
Exam: Fundamentals of Quantum Computing Using Qiskit v2.X Developer (ENU) Credential: IBM Certified Quantum Computation using Qiskit v2.X Developer — Associate Exam date (mine): August 4, 2026
Exam Logistics
| Item | Detail |
|---|---|
| Exam code | C1000-179 |
| Questions | 68 (multiple choice) |
| Duration | 90 minutes (~79 seconds/question) |
| Passing score | 47 correct ≈ 69% |
| Cost | $200 USD |
| Qiskit version tested | v2.X (V2 primitives, Qiskit Runtime) |
| Assumed background | Python proficiency, basic linear algebra; no physics degree required |
Section Weights at a Glance
| # | Section | Weight |
|---|---|---|
| 1 | Create quantum circuits | 18% |
| 2 | Perform quantum operations | 16% |
| 3 | Run quantum circuits | 15% |
| 4 | Use the Sampler primitive | 12% |
| 5 | Use the Estimator primitive | 12% |
| 6 | Visualize quantum circuits, measurements, and states | 11% |
| 7 | Retrieve and analyze results | 10% |
| 8 | Operate with OpenQASM | 6% |
Sections 1–5 together are ~73% of the exam — prioritize accordingly.
Section 1 — Create Quantum Circuits (18%)
1.1 Basic circuit construction
QuantumCircuit(num_qubits, num_clbits)constructor and its variantsQuantumRegister,ClassicalRegister,AncillaRegister; named registers- Single-qubit gates:
x,y,z,h,s,sdg,t,tdg,p,rx,ry,rz,u,sx,id - Two-qubit gates:
cx/cnot,cz,cy,ch,swap,iswap,cp,crx,cry,crz,rxx,ryy,rzz,ecr - Multi-qubit gates:
ccx(Toffoli),cswap(Fredkin),mcx measure(),measure_all(),measure_active();barrier(),reset()- Circuit composition:
compose(),append(),tensor();inverse(),power(),copy() - Controlled/custom gates:
.control(),.to_gate(),.to_instruction(), gate labels - Circuit properties:
depth(),size(),width(),num_qubits,count_ops(),qubits/clbits - Building well-known circuits: Bell states, GHZ states, superposition prep
1.2 Parameterized circuits
qiskit.circuit.Parameter— symbolic parameters in gatesParameterVector— vectors of parametersassign_parameters()(dict or list binding;inplaceflag)circuit.parametersattribute (sorted order matters for list binding)- Parameter expressions (arithmetic on parameters)
- Passing parameter values via PUBs at runtime instead of binding
1.3 Dynamic circuits (classical feedforward)
- Mid-circuit measurement
with circuit.if_test((clbit/creg, value)):blocks andelsebranchswitch,for_loop,while_loopcontrol-flow constructs- Use cases: teleportation, active reset, conditional gates
1.4 Transpilation and optimization
- Why transpile: basis gates, coupling map / connectivity, ISA circuits
generate_preset_pass_manager(optimization_level, backend=...)— the v2.x standard- Optimization levels 0–3 (what each adds: layout, routing, translation, optimization)
- Transpiler stages: init → layout → routing → translation → optimization → scheduling
- Layout and routing concepts: initial layout, SWAP insertion, VF2 layout
transpile()function vs pass managers- Target,
backend.target, basis gate sets (e.g., ECR/CZ +rz,sx,x) - Effect of transpilation on depth/gate counts; comparing before vs after
Section 2 — Perform Quantum Operations (16%)
2.1 Pauli operators and observables
qiskit.quantum_info.Pauli— construction from strings (e.g.,Pauli('IZ')), phase conventions- Qubit ordering: little-endian — rightmost character acts on qubit 0 (classic trap)
SparsePauliOp— construction (from_list,from_sparse_list), coefficients,simplify()- Composing/manipulating operators:
compose(),tensor(),expand(),adjoint() .to_matrix()conversions; matrix forms of I, X, Y, Z, H, S, T- Defining observables for the Estimator (Hamiltonians as Pauli sums)
2.2 Quantum states and operators (quantum_info)
Statevector—from_label(),from_instruction(), evolving withevolve()DensityMatrixbasicsOperatorclass — building from circuits/matrices, unitary checks- Inner products, fidelity (
state_fidelity),probabilities(),probabilities_dict() Statevector.sample_counts(),expectation_value()
2.3 Applying quantum operations & gate effects
- What each gate does to basis states and Bloch-sphere states
- Global vs relative phase; effect of Z/S/T on superposition states
- Creating entanglement (H + CX); recognizing entangled vs product states
- Commutation basics (e.g., do X and Z commute), gate identities (HZH = X, HXH = Z)
- Rotation gates as exp(-iθP/2); special angles (rz(π) ≡ Z up to phase)
Section 3 — Run Quantum Circuits (15%)
3.1 Qiskit Runtime service and backends
QiskitRuntimeService()— account setup, channels, saving credentialsservice.backend(...),service.least_busy(operational=True, simulator=False)- Backend properties:
num_qubits,basis_gates,coupling_map,target - ISA circuits requirement: circuits must be transpiled to backend ISA before running on hardware (v2 primitives reject non-ISA circuits)
3.2 Execution modes
- Job mode — single primitive request, standalone queuing
- Batch mode — multiple independent jobs submitted together, parallel scheduling, no state between jobs
- Session mode — dedicated/exclusive access window; iterative workloads (e.g., variational algorithms); sequential jobs without re-queuing
- When to choose each mode;
Session(backend=...),Batch(backend=...)context managers - Passing
mode=to a primitive (session, batch, or backend object) - Session/batch lifecycle: max time, interactive timeout, closing
3.3 Running with primitives
- Instantiating
SamplerV2(mode=...)/EstimatorV2(mode=...) job = primitive.run(pubs); job is asynchronous- Local testing:
StatevectorSampler/StatevectorEstimator(qiskit.primitives), Aer simulators, fake backends (FakeManilaV2etc.) - Shots: setting per-run and per-PUB; default shot behavior
Section 4 — Use the Sampler Primitive (12%)
4.1 Concept
- Sampler returns per-shot measurement samples / bitstring distributions (not expectation values)
- Circuits must contain measurements for Sampler
- Sampler PUB shape:
(circuit,)or(circuit, parameter_values)and optional shots:(circuit, param_values, shots)
4.2 Results
result = job.result(); indexing PUB results:result[0]result[0].data.<creg_name>(e.g.,.data.measformeasure_all(),.data.cfor default register)BitArray:get_counts(),get_bitstrings(),num_shots,num_bitsjoin_data()when multiple classical registers exist
4.3 Options (error suppression for Sampler)
sampler.options.default_shots- Dynamical decoupling:
options.dynamical_decoupling.enable = True, sequence types (XX, XpXm, XY4) - Twirling:
options.twirling.enable_gates,enable_measure,num_randomizations,shots_per_randomization - Note: Sampler has no
resilience_level(that's Estimator-only)
Section 5 — Use the Estimator Primitive (12%)
5.1 Concept
- Estimator returns expectation values ⟨ψ|O|ψ⟩ of observables
- Circuits must NOT have measurements (observable defines the measurement)
- Estimator PUB shape:
(circuit, observables),(circuit, observables, parameter_values), optional precision - Observables must be mapped to the transpiled circuit layout:
observable.apply_layout(isa_circuit.layout) - Broadcasting rules for arrays of observables/parameters
5.2 Results
result[0].data.evs(expectation values) and.data.stds(standard errors)result[0].metadata(e.g., target precision, shots)
5.3 Options (error mitigation — Estimator)
options.default_precision/default_shots- Resilience levels: 0 (none), 1 (default — measurement error mitigation / TREX), 2 (adds ZNE)
options.resilience.zne_mitigation = True;ZneOptions:noise_factors,extrapolator(linear, exponential, polynomial)- Measurement mitigation:
options.resilience.measure_mitigation - PEC (probabilistic error cancellation) awareness —
options.resilience.pec_mitigation - Dynamical decoupling and twirling (
TwirlingOptions) also apply to Estimator - Error suppression (DD, twirling — before/during execution) vs error mitigation (TREX, ZNE, PEC — post-processing) distinction
Section 6 — Visualize Circuits, Measurements, and States (11%)
6.1 Circuit visualization
circuit.draw()— outputs:'text','mpl','latex';reverse_bits,fold,idle_wiresargs- Reading circuit diagrams: gate order (left→right), qubit ordering (top = q0), controls vs targets
- Identifying the circuit that produces a given diagram (and vice versa)
6.2 Measurement/counts visualization
plot_histogram(counts)— single and multiple datasets,legend,sort,number_to_keepplot_distribution()for quasi-probabilities- Interpreting histograms: bitstring ordering (little-endian), identifying Bell/GHZ signatures
6.3 State visualization
plot_bloch_vector()— a single Bloch vector; spherical/cartesian coordinatesplot_bloch_multivector(statevector)— per-qubit Bloch spheres; entangled qubits show zero-length vectors (center of sphere)plot_state_qsphere()— amplitude = blob size, phase = color; reading relative phasesplot_state_city(),plot_state_hinton(),plot_state_paulivec()Statevector.draw('latex')/array_to_latex- Matching a state (e.g., |+⟩, |−⟩, |i⟩) to its Bloch sphere position: |0⟩=+Z, |1⟩=−Z, |±⟩=±X, |±i⟩=±Y
Section 7 — Retrieve and Analyze Results (10%)
7.1 Job management
job.job_id(),job.status(),job.done(),job.cancel()- Asynchronous execution model; retrieving completed jobs later:
service.job(job_id) service.jobs(...)filtering (backend, session, pending)job.metrics(),job.usage()— QPU time awareness
7.2 Result objects (V2)
PrimitiveResultstructure: iterable ofPubResultsPubResult.data(DataBin),PubResult.metadata, job-levelresult.metadata- Sampler: counts/bitstrings from
BitArray(see §4.2) - Estimator:
evs,stds,ensemble_standard_error(see §5.2)
7.3 Analysis
- Converting counts → probabilities; normalizing over shots
- Comparing ideal (simulator) vs noisy (hardware) distributions
- Computing expectation values from counts manually (e.g., ⟨Z⟩ = (n₀ − n₁)/shots)
- Interpreting standard errors and precision vs shots relationship (error ∝ 1/√shots)
Section 8 — Operate with OpenQASM (6%)
8.1 OpenQASM 3
- Exporting:
qiskit.qasm3.dumps(circuit)(string),qiskit.qasm3.dump(circuit, file) - Importing:
qiskit.qasm3.loads(program_str),qiskit.qasm3.load(file) - OpenQASM 3 program structure:
OPENQASM 3.0;,include "stdgates.inc";,qubit[n],bit[n], gate syntax - OpenQASM 3 features vs 2: classical control flow, input parameters, typed classical data
8.2 OpenQASM 2 (interoperability)
QuantumCircuit.from_qasm_str()/qiskit.qasm2.loads(),qasm2.dumps()- Reading a short QASM program and predicting the circuit it builds
8.3 REST API awareness
- Submitting Runtime jobs with QASM payloads via the IBM Quantum REST API (high-level awareness)
Cross-Cutting Concepts (show up everywhere)
- Little-endian convention — qubit 0 is rightmost in bitstrings, statevector indices, and Pauli strings
- V2 primitives only —
SamplerV2/EstimatorV2, PUBs; V1 (backend.run,Sampler/EstimatorV1) is deprecated/removed - Qiskit 1.0/2.0 packaging changes:
qiskit_ibm_runtimevsqiskit; removal ofqiskit.execute;Aermoved toqiskit_aer - The Qiskit patterns workflow: Map → Optimize (transpile) → Execute (primitives) → Post-process
- Common exam traps: forgetting
apply_layouton observables, running non-ISA circuits, Sampler without measurements, Estimator with measurements, parameter binding order
Prerequisites Checklist
- Python: comfortable with classes, context managers (
with), NumPy arrays - Linear algebra: matrix multiplication, tensor products, eigenvalues, unitary/Hermitian matrices
- Complex numbers: modulus, phase, Euler's formula
- Dirac notation: |0⟩, |1⟩, |+⟩, |−⟩, bras/kets, inner/outer products
- Core QC concepts: superposition, entanglement, measurement/collapse, no-cloning
Official & Recommended Resources
- Official exam page + Sample Test — IBM Training: C9008400 certification (work the sample test until ≥90%)
- IBM Quantum Documentation — docs.quantum.ibm.com: primitives, execution modes, error mitigation, transpilation guides
- IBM Quantum Learning platform — learning.quantum.ibm.com: "Basics of Quantum Information" (John Watrous), "Quantum Computing in Practice"
- Qiskit YouTube channel — "Preparing for the Qiskit Developer Certification 2.0" series
- Hands-on: local Qiskit install +
qiskit-ibm-runtime+qiskit-aer; experiment with every API in this syllabus - Community: SchrodinTeq sample-test walkthroughs, Udemy practice exams, Quantum Computing Stack Exchange
Sources: IBM Training certification page; exam-guide writeups corroborated across SchrodinTeq, ppalme's review, CertificationBox, and ValidExam objective listings. Verified 2026-07-24 against the official IBM Study Guide (resource-artifactory/official/C1000-179_STU_StudyGuideQiskitv2.pdf) — all 8 sections and weights match exactly (official section order: 1 operations, 2 visualize, 3 create, 4 run, 5 sampler, 6 estimator, 7 retrieve, 8 OpenQASM).