> ## Documentation Index
> Fetch the complete documentation index at: https://prod-mint.classiq.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 0.44.0

Released on 2024-08-04.

## Upgrade Instructions

* [Python SDK](/getting-started/registration_installations#platform-version-updates)
* The IDE upgrades automatically.

## Bug Fixes

1. Fixed a bug related to nested control operations.
2. Fixed a bug related to boolean arithmetic expressions with invert.
3. Fixed a bug related to arithmetic expressions inside within-apply.

## IDE

1. Add back improved circuit nodes search.
2. Fix bug in Quantum Program page .qprog file extensions uploads.
3. New Quantum Program export option: Quantum programs can now be exported as .qprog files.
4. Poll all active jobs in the job list, not just the selected job.
5. Add support for Alice & Bob hardware configurations in the IDE.

## Enhancements

1. Add support for arithmetic boolean expressions as conditionals for control statements;
   see [here](/qmod-reference/language-reference/statements/control/).
2. Add quantum structs.
3. The element type of quantum arrays can be any quantum type. N-dimensional quantum arrays are supported.
4. Operand parameter names are optional in both Native
   (`qfunc (indicator: qbit)` -> `qfunc (qbit)`) and Python
   (`QCallable[QBit]` -> `QCallable[Annotated[QBit, "indicator"]]`) Qmod.
5. Improve error messages.
6. Provide better circuits for certain boolean arithmetic expressions.
7. Improved qubit reuse and runtime performance for model without constraints.
8. Add `solovay_kitaev_max_iterations` field to the synthesis preferences,
   allowing for tuning the accuracy of the Solovay-Kitaev algorithm.
9. Built-in classical functions to decompose/compose a matrix into/from a Hamiltonian. Example of usage:

<Tabs>
  <Tab title="SDK">
    [comment]: DO_NOT_TEST

    ```python theme={null}
    mat = np.array([[0, 1, 2, 3], [1, 4, 5, 6], [2, 5, 7, 8], [3, 6, 8, 9]])
    hamiltonian = matrix_to_hamiltonian(mat)
    mat = hamiltonian_to_matrix(hamiltonian)
    ```
  </Tab>
</Tabs>

10. parsed\_states, parsed\_counts, parsed\_state\_vector will contain the parsed execution details as lists if a quantum array was used in the model.

<Tabs>
  <Tab title="SDK">
    [comment]: DO_NOT_TEST

    ```python theme={null}
    @qfunc
    def main(qna: Output[QArray[QNum[3, True, 0]]]) -> None:
        allocate(6, qna)
        hadamard_transform(qna)


    qp = synthesize(create_model(main))
    res = execute(qp).result()
    print(res[0].value.parsed_counts[0])
    ```
  </Tab>
</Tabs>

previously this would print -> state={{'qna': 43}} shots=27
now it prints -> state={{'qna': [-2, 3]}} shots=27

## Library and Documentation

1. A new tutorial on Hamiltonian simulation for block-encoded Hamiltonians, using QSVT and Qubitization, was added to
   the library.
2. A new tutorial on solving the discrete Poisson's equation using the HHL algorithm, combined with quantum sine and
   cosine transforms, was added to the library;
   see [here](/explore/algorithms/quantum_differential_equations_solvers/discrete_poisson_solver/discrete_poisson_solver/).
3. New state preparation functions - `prepare_unifrom_trimmed_state`, `prepare_unifrom_interval_state`, see [here](/explore/functions/qmod_library_reference/classiq_open_library/special_state_preparations/prepare_partial_uniform_state/).
4. Enhanced the Discrete logarithm example to the case where the order is not power of 2, see [here](/explore/algorithms/number_theory_and_cryptography/discrete_log/discrete_log/).
5. Updated the [Quantum Types](https:///qmod-reference/language-reference/quantum-types/) documentation page.

## Interface Changes

1. Some builtin operations parameters have been renamed:
   * `control(ctrl=..., operand=...)` => `control(ctrl=..., stmt_block=...)`
   * `within_apply(compute=..., action=...)` => `within_apply(within=..., apply=...)`
   * `power(power=..., operand=...)` => `power(exponent=..., stmt_block=...)`
   * `invert(operand=)` => `invert(stmt_block=...)`

## Deprecations

1. SDK: The `@struct` decorator has been removed. Define classical structs
   using `@dataclass`.
2. The field `variance` in `EstimationResult` is deprecated, and will be
   populated with the value `-1` until removed.
3. The field `timeout_sec` in `ExecutionPreferences`, and the field
   `job_timeout` in `AwsBackendPreferences`, have been removed.
4. classical arguments in the native language are now inside the parentheses
   section (`(...)`) alongside quantum variables
   and not inside the angle brackets (`<...>`), the angle brackets section is
   now considered deprecated.
   For example, you should
   migrate: `qfunc <a: real> main{...}` -> `qfunc main(a: real) {...}`
   for info refer to the language reference about functions.
   A Warning was added to the IDE in the case it is used.
