### New features

Adds the function

`find_classical_subsystem`

that tries to find a subset of the modes with a classical covariance matrix. #193Adds the functions

`mean_number_of_clicks`

and`variance_number_of_clicks`

that calculate the first and second statistical moments of the total number of clicks in a Gaussian state centered at the origin. #195Adds the module

`decompositions`

with the function`williamson`

to find the Williamson decomposition of an even-size positive-semidefinite matrix. #200Adds the

`loop_hafnian_quad`

function to the Python interface for converting double precision matrices into quad precision, doing the calculations in quad precision, and then return the result as a double. #201

### Improvements

Introduces a new faster and significantly more accurate algorithm to calculate power traces allowing to speed up the calculation of loop hafnians #199

The

`quantum`

module has been refactored and organized into sub-modules. Several functions have been renamed, while the old names are being deprecated. #197Adds support for C++14 #202

`pytest-randomly`

is added to the test suite to improve testing and avoid stochastically failing tests. #205Modifies the function

`input_validation`

to use`np.allclose`

for checking the symmetry of the input matrices. #206Modifies the function

`_hafnian`

to calculate efficiently loop hafnians of diagonal matrices. #206

### Breaking changes

Removes the redundant function

`normal_ordered_complex_cov`

. #194Renames the function

`mean_number_of_clicks`

to be`mean_number_of_click_graph`

. #195

### Contributors

This release contains contributions from (in alphabetical order):

Theodor Isacsson, Nicolas Quesada, Trevor Vincent