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 (Earth science problems for the evaluation of strategies, solvers and optimizers) 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
 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
 7# Create an instance of the test problem class
 8tp = test_problem()
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!
21# Compute a Gauss-Newton model update
22model += np.linalg.solve(G.T.dot(G), G.T.dot(residuals))
24# Compare our result to the answer suggested by Espresso
25print("Our result:", model)
26print("Espresso:", tp.good_model)
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:

📙 User Guide

Read about what Espresso provides and how to use it

📗 Contributor Guide

Contribute your own example problems with minimal steps

📘 Developer Guide

Learn about the infrastructure behind Espresso

🐍 GitHub Repository

Explore the source code on GitHub

🐛 Issue Tracker

Report a bug or suggest a feature by creating an issue

💬 Join Slack

Accept this invitation to join the conversation on Slack

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