# Welcome to Espresso!#

You’ve just come up with a new optimisation algorithm, inversion strategy, or machine learning-based inference framework. Now you want to see how it performs on a real-world problem…

Espresso (**E**arth **s**cience **pr**oblems for the **e**valuation of **s**trategies, **s**olvers and **o**ptimizers) aims to make this as easy as possible. It provides access to a range of exemplars via a standardized Python interface, including domain-expert–curated datasets and corresponding simulation codes. Swapping from one test problem to the next is just one line of code.

Here’s a simple illustration:

```
1import numpy as np
2
3# Select the test problem to be used -- change this line to any
4# other test problem and everything else should still work!
5from espresso import SimpleRegression as test_problem
6
7# Create an instance of the test problem class
8tp = test_problem()
9
10# The test problem provides...
11# ... an initial (null) model vector
12model = tp.starting_model
13# ... the ability to compute simulated data for an arbitrary
14# model vector, and the corresponding jacobian (i.e. derivatives
15# of data wrt model parameters)
16predictions, G = tp.forward(model, with_jacobian = True)
17# ... a data vector, which matches the output from `tp.forward()`
18residuals = tp.data - predictions
19# ... and much more!
20
21# Compute a Gauss-Newton model update
22model += np.linalg.solve(G.T.dot(G), G.T.dot(residuals))
23
24# Compare our result to the answer suggested by Espresso
25print("Our result:", model)
26print("Espresso:", tp.good_model)
27
28# And let's visualise both to see where the differences are:
29my_fig = tp.plot_model(model)
30espresso_fig = tp.plot_model(tp.good_model)
31data_fig = tp.plot_model(tp.data, tp.forward(model))
```

If this looks interesting, you can:

Espresso is an open-source community effort, currently supported and coordinated by InLab.