Skip to content

0 41 0

Upgrade Instructions


  1. Hardware-aware synthesis will now use the Solovay-Kitaev algorithm to approximate single-qubit gates when the basis gate set is a specific variation of Clifford + T (X, Z, H, T, CX, and CCX).
  2. qsvt function was added to the function library. See Quantum Singular Value Transformation.
  3. A tutorial on discrete quantum walks was added to the tutorials library. See Discrete Quantum Walk.
  4. SDK: Quantum functions (@qfunc) can be recursive.
  5. SDK: PauliTerm can be used to declare a hamiltonian.
    hamiltonian = [
        PauliTerm(pauli=[Pauli.I], coefficient=1),
        PauliTerm(pauli=[Pauli.Z, Pauli.X], coefficient=2),
  6. Introducing ExecutionSession which will allow choosing the execution primitive in the SDK without the need of changing/synthesizing the quantum program once again.
model = create_model(main)
qprog = synthesize(model)
preferences = ExecutionPreferences(num_shots=1200)
execution_session = ExecutionSession(qprog, preferences)

# if the quantum program does not need any execution paramters:

# if the quantum program needs execution parameters:
execution_session.sample({"phi": 1})

# if multiple samples are needed:
execution_session.batch_sample([{"phi": 1}, {"phi": 2}, {"phi": 3}])

# if an estimation is needed without execution parameters:
hamiltonian = [
    PauliTerm(pauli=[Pauli.I], coefficient=1),
    PauliTerm(pauli=[Pauli.Z], coefficient=2),

# if an estimation is needed with execution paramters:
execution_parameters.estimate(hamiltonian, {"theta": 1})

# if multiple estimations are needed:
execution_parameters.batch_estimate(hamiltonian, [{"theta": 1}, {"theta": 2}])
  1. A Qmod library reference, with usage examples for built-in and open library functions, can now be found in Qmod Library Reference.

Interface Changes

  1. SDK: In execute_qnn, the optional argument observables of type PauliOperators has been replaced with the optional argument observable of type PauliOperator.
  2. Documentation: The structure and content have the classiq documentation have been changed signficantly with the following new structure:

  3. What's Classiq

  4. Classiq 101
  5. Explore
  6. Read
  7. Practice
  8. Reference Manual
  9. Release Notes

The old User Guide chapter from the previous documentation can be found in the new Reference Manual.


  1. SDK: The quantum_if operation and the old control syntax have been removed.

  2. quantum_if is removed. Use control instead.

  3. control(operand, ctrl) is no longer supported. Use control(ctrl, operand) instead.
  4. control(n, operand) does not support quantum numeric variables (n). Instead, use a bind operation to cast n into a quantum array, or compare n to an integer explicitly (e.g., n == 7).

  5. SDK: The QParam type has been removed.

  6. Instead of QParam[int], use CInt.

  7. Instead of QParam[float], use CReal.
  8. Instead of QParam[bool], use CBool.
  9. Instead of QParam[List[...]], use CArray[...].
  10. Instead of QParam[Array[..., size]], use CArray[..., size].

  11. Native Qmod: Accessing quantum variable properties (e.g., qbv.len or n.is_signed) via function call syntax (len(qbv), is_signed(qbv)) is no longer supported.

  12. The field optimizer_preferences of ExecutionPreferences has been removed.

  13. The function set_initial_values has been removed.


  1. "Slack" and "Learn More" links were moved from the side drawer to the IDE header. New links were added as well: Community, User Guide.
  2. Allow visualization of larger circuits and prolong the timeout for visualization
  3. Users can now download a LaTeX format of their quantum programs directly from the IDE, allowing for easy sharing, publication, and presentation of their work.


  1. Cookies settings are now available to adjust the given consent at any time.

Bug fixes

  1. "selected example not found" error when opening the IDE
  2. Resetting now clears preferences form instead of initializing from cache on the model page
  3. Naming for exported files on the Graphical Editor
  4. State vector measurement results ordering
  5. Parameter names in lambda expressions don't have to match the parameter names in operand declarations:
qfunc my_H(qb: qbit) {
apply_to_all<my_H>(qba); // used to throw an error since "qb" != "target"
def my_H(qb: QBit) -> None:

apply_to_all(my_H, qba)  # used to throw an error since "qb" != "target"