# Release notes

## What’s new in myQLM 1.5.1

Released December 6, 2021

### New features

`PyLinalg`

now supports efficient implementation of controlled gates. It now supports simulation of circuits generated with the`submatrices_only`

keyword argument set to`True`

(`prog.to_circ(submatrices_only=True)`

)

`HardwareSpecs`

objects now have an attribute`processing_types`

used to define the type of supported measurement (e.g., Observable or Sample). QuameleonPlugin has been updated to check this new attributeAdded a device ‘ZUCHONGZHI’ describing the Chinese quantum chip of the same name

### Updated features

`PyLinalg`

should now throw a cleaner exception (`QPUException`

) when failing to retrieve the matrix of a gateThe

`get_variables`

methods of myQLM objects will now return a sorted list instead of a set

`BatchResult`

returned by a`Junction`

has the same meta_data as the input`Batch`

### Fixes

Fix

`Junction`

plugins when a Batch object having no meta data is submittedFix

`len(Result)`

when the result is stored as a mapAn exception is now raised when trying to differentiate non-observable job

## What’s new in myQLM 1.4.0

Released June 30, 2021

### myQLM Power Access

myQLM can be extended to access all QPUs and Plugins of a remote QLM, the Quantum Learning Machine from Atos and let you benefit the power of the Appliance. If the feature is activated on your QLM, the submission of a job would look like:

```
from qlmaas.qpus import LinAlg
from qlmaas.plugins import Nnizer
remote_stack = Nnizer() | LinAlg()
async_result = remote_stack.submit(job)
result = async_result.join()
```

### New features

Support for Python 3.9 for Linux, Windows and macOS

Added support for brew Python distribution on macOS

Circuits can now be displayed in the stdout using their new

`display()`

method. They also have two new methods`count()`

to count the number of occurrences of some gate and`statistics()`

to gather some statistics about their number of gates.It is now possible to generate the partial derivatives -

`differentiate()`

and the gradient of a Job -`gradient()`

. These methods return jobs collections whose energies can be summed in order to evaluate the derivatives/gradient. They rely on shift-rule or Hadamard tests (see their documentation).The partial derivative works also for multivariable ArithExpressions -

`differentiate()`

. It can be applied to the usual arithmetic operations between functions, as well to functions to the power of other functions!Added a

`dag()`

method for circuit objectsAdded an implementation of Kerenidis-PrakashQRAM/State preparation -

`KPTree`

.Updated documentation of

`Op`

Link the documentation to their corresponding notebooks when possible

One can now create a job ready to run on the

`SimulatedAnnealing`

QPU via the`to_job()`

method of the`Ising`

and`QUBO`

classes.Added arithmetic operations for

`Ising`

and`QUBO`

problems - addition/substraction of an energy offset, J-coupling, magnetic field or even a whole Ising problem to another one. Multiplication and division by real numbers is also possible. Analogously for QUBO.The

`Ising`

class has been serialized and Ising problems can now also be dumped and loaded.

### Known problems

Python 3.9 on macOS/brew distribution may not work (SIGSEGV) Please use the distribution from python.org