Hi everyone, we’re excited to announce Strawberry Fields version 0.12.0

This release includes a major new feature: the `apps`

package, providing an applications layer for using near-term photonic devices to help solve problems of practical interest.

Users can now simulate a near-term photonic algorithm, Gaussian boson sampling, and plug-in samples to help solve the following problems:

**Graph and network optimization**

- Use heuristics to search for dense regions of a graph with the
`apps.subgraph`

module.

## Code example

```
from strawberryfields.apps import data, sample, subgraph
import networkx as nx
s = data.Planted() # load samples from data module
g = nx.Graph(data.Planted().adj) # load graph
s = sample.postselect(s, 16, 30) # postselect sample sizes
s = sample.to_subgraphs(s, g) # convert samples to subgraphs
k_min = 8 # smallest subgraph size
k_max = 16 # largest subgraph size
r = subgraph.search(s, g, k_min, k_max) # implement search algorithm
print(r[10][0]) # densest subgraph of size 10
```

- Find large subgraphs that are fully connected, helping solve the maximum clique problem with the
`apps.clique`

module.

## Code example

```
from strawberryfields.apps import clique, data, sample
import networkx as nx
p_hat = data.PHat() # load samples
g = nx.Graph(p_hat.adj) # create graph from adjacency matrix
s = sample.postselect(p_hat, 16, 20) # postselect samples
s = sample.to_subgraphs(s, g) # convert samples to subgraphs
# shrink subgraphs to a list of cliques
cliques = [clique.shrink(i, g) for i in s]
# run local search for all cliques
cliques = [clique.search(c, g, 10) for c in cliques]
# sort cliques in decreasing size
cliques = sorted(cliques, key=len, reverse=True)
print(cliques[:3]) # the three largest cliques
```

**Machine learning**

- Measure similarity between graphs with the
`apps.similarity`

module, which can be useful for training machine learning models to classify graphs.

## Code example

```
from strawberryfields.apps import data, similarity
events = [8, 10] # event photon numbers
max_count = 2 # maximum number of photons per mode
datasets = data.Mutag0(), data.Mutag1(), data.Mutag2(), data.Mutag3()
f1, f2, f3, f4 = (similarity.feature_vector_sampling(data, events, max_count) for data in datasets) # create feature vectors
print(f1, f2, f3, f4)
```

- Sample subsets of points according to a permanental point process, favouring the selection of similar points.

## Code example

```
from strawberryfields.apps import plot, points
import numpy as np
cluster1 = np.random.normal(2, 0.3, (100, 2)) # generate two clusters of points
cluster2 = np.random.normal(4, 0.3, (100, 2))
background = np.random.rand(200, 2) * 6.0 # generate random background points
R = np.concatenate((cluster1, cluster2, background))
sigma = 1.0 # kernel parameter
K = points.rbf_kernel(R, sigma) # creates kernel matrix
n_mean = 50 # mean number of photons
n_samples = 10 # number of samples
samples = points.sample(K, n_mean, n_samples) # generates samples
plot.points(R, samples[0], point_size=10) # plot a sample from the point process
```

**Chemistry**

- Reconstruct the vibronic absorption spectrum of a molecule using the
`apps.vibronic`

module.

## Code example

```
from strawberryfields.apps import data, plot, sample, vibronic
formic = data.Formic() # load data
molecule_data = formic.w, formic.wp, formic.Ud, formic.delta # load properties of molecule
T = 0 # temperature
gbs_params = vibronic.gbs_params(*molecule_data, T) # encode into GBS parameters
nr_samples = 2
s = sample.vibronic(*gbs_params, nr_samples) # generate samples
e = vibronic.energies(formic, formic.w, formic.wp) # convert samples to energies
plot.spectrum(e, xmin=-500, xmax=9000)
```

Each new addition includes an in-depth tutorial to walk you through solving the problem with a photonic quantum computer. You can also check out our paper at https://arxiv.org/abs/1912.07634 for further details!

We have also carried out an extensive update to our documentation. This includes a new theme and a restructure of the content to make it more accessible. Check out our new look docs at https://strawberryfields.readthedocs.io/.

The full release notes are available at https://github.com/XanaduAI/strawberryfields/releases/tag/v0.12.0.

As always, this release would not have been possible without all the help from our contributors:

@jmarrazola , @Tom_Bromley @Josh, Soran Jahangiri, @Nicolas_Quesada