Skip to content

Commit e8b4a59

Browse files
imreddyTejaclaude
andcommitted
Refresh README, LICENSE, and NOTICE metadata
Standardize the README to match the structure/style/badges used across other CliMA repos (logo, badge table, Features, Quick Example), and update the LICENSE/NOTICE copyright line to reflect the repo's actual first-commit year (2019-2026), California Institute of Technology (Climate Modeling Alliance). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T3GJ3g8X3sQuPCnGcrwfTy
1 parent 26d7455 commit e8b4a59

3 files changed

Lines changed: 57 additions & 36 deletions

File tree

LICENSE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@
186186
same "printed page" as the copyright notice for easier
187187
identification within third-party archives.
188188

189-
Copyright [yyyy] [name of copyright owner]
189+
Copyright 2019-2026 California Institute of Technology (Climate Modeling Alliance)
190190

191191
Licensed under the Apache License, Version 2.0 (the "License");
192192
you may not use this file except in compliance with the License.

NOTICE

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Copyright 2023 California Institute of Technology (Caltech)
1+
Copyright 2019-2026 California Institute of Technology (Climate Modeling Alliance)
22

33
Licensed under the Apache License, Version 2.0 (the "License");
44
you may not use this file except in compliance with the License.

README.md

Lines changed: 55 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,56 @@
1-
# CalibrateEmulateSample.jl
2-
Implements a derivative-free machine-learning-accelerated pipeline for uncertainty quantification.
3-
1+
<div align="center">
2+
<img src="docs/src/assets/logo.svg" alt="CalibrateEmulateSample.jl Logo" width="128" height="128">
3+
</div>
44

5-
| **Documentation** | [![dev][docs-dev-img]][docs-dev-url] |
6-
|---------------------:|:-------------------------------------------------|
7-
| **JOSS** | [![DOI][joss-img]][joss-url] |
8-
| **DOI** | [![DOI][zenodo-img]][zenodo-latest-url] |
9-
| **Docs Build** | [![docs build][docs-bld-img]][docs-bld-url] |
10-
| **Unit tests** | [![unit tests][unit-tests-img]][unit-tests-url] |
11-
| **Code Coverage** | [![codecov][codecov-img]][codecov-url] |
12-
| **Downloads** | [![Downloads][dlt-img]][dlt-url] |
5+
# CalibrateEmulateSample.jl
136

14-
[joss-img]: https://joss.theoj.org/papers/10.21105/joss.06372/status.svg
15-
[joss-url]: https://doi.org/10.21105/joss.06372
7+
Implements a derivative-free machine-learning-accelerated pipeline for uncertainty quantification.
168

17-
[zenodo-img]: https://zenodo.org/badge/179573047.svg
18-
[zenodo-latest-url]: https://zenodo.org/badge/latestdoi/179573047
9+
|||
10+
|------------------:|:------------------------------------------------------------|
11+
| **Documentation** | [![stable][docs-stable-img]][docs-stable-url] [![dev][docs-dev-img]][docs-dev-url] |
12+
| **Version** | [![version][version-img]][version-url] |
13+
| **License** | [![license][license-img]][license-url] |
14+
| **Docs Build** | [![docs build][docs-bld-img]][docs-bld-url] |
15+
| **Tests** | [![unit tests][unit-tests-img]][unit-tests-url] |
16+
| **Code Coverage** | [![codecov][codecov-img]][codecov-url] |
17+
| **Downloads** | [![Downloads][dlt-img]][dlt-url] |
18+
| **JOSS** | [![DOI][joss-img]][joss-url] |
19+
| **DOI** | [![zenodo][zenodo-img]][zenodo-url] |
20+
21+
[docs-stable-img]: https://img.shields.io/badge/docs-stable-blue.svg
22+
[docs-stable-url]: https://CliMA.github.io/CalibrateEmulateSample.jl/stable/
1923

2024
[docs-dev-img]: https://img.shields.io/badge/docs-dev-blue.svg
2125
[docs-dev-url]: https://CliMA.github.io/CalibrateEmulateSample.jl/dev/
2226

27+
[version-img]: https://juliahub.com/docs/General/CalibrateEmulateSample/stable/version.svg
28+
[version-url]: https://juliahub.com/ui/Packages/General/CalibrateEmulateSample
29+
30+
[license-img]: https://img.shields.io/badge/license-Apache%202.0-blue.svg
31+
[license-url]: https://github.com/CliMA/CalibrateEmulateSample.jl/blob/main/LICENSE
32+
2333
[docs-bld-img]: https://github.com/CliMA/CalibrateEmulateSample.jl/actions/workflows/Docs.yml/badge.svg
2434
[docs-bld-url]: https://github.com/CliMA/CalibrateEmulateSample.jl/actions/workflows/Docs.yml
2535

2636
[unit-tests-img]: https://github.com/CliMA/CalibrateEmulateSample.jl/actions/workflows/Tests.yml/badge.svg
2737
[unit-tests-url]: https://github.com/CliMA/CalibrateEmulateSample.jl/actions/workflows/Tests.yml
2838

29-
[codecov-img]: https://codecov.io/gh/CliMA/CalibrateEmulateSample.jl/branch/master/graph/badge.svg
39+
[codecov-img]: https://codecov.io/gh/CliMA/CalibrateEmulateSample.jl/branch/main/graph/badge.svg
3040
[codecov-url]: https://codecov.io/gh/CliMA/CalibrateEmulateSample.jl
3141

32-
[dlm-img]: https://img.shields.io/badge/dynamic/json?url=http%3A%2F%2Fjuliapkgstats.com%2Fapi%2Fv1%2Fmonthly_downloads%2FCalibrateEmulateSample&query=total_requests&suffix=%2Fmonth&label=Downloads
33-
[dlm-url]: https://juliapkgstats.com/pkg/CalibrateEmulateSample.c
34-
3542
[dlt-img]: https://img.shields.io/badge/dynamic/json?url=http%3A%2F%2Fjuliapkgstats.com%2Fapi%2Fv1%2Ftotal_downloads%2FCalibrateEmulateSample&query=total_requests&label=Downloads
36-
[dlt-url]: https://juliapkgstats.com/pkg/CalibrateEmulateSample.c
43+
[dlt-url]: https://juliapkgstats.com/pkg/CalibrateEmulateSample
3744

45+
[joss-img]: https://joss.theoj.org/papers/10.21105/joss.06372/status.svg
46+
[joss-url]: https://doi.org/10.21105/joss.06372
47+
48+
[zenodo-img]: https://zenodo.org/badge/179573047.svg
49+
[zenodo-url]: https://zenodo.org/badge/latestdoi/179573047
3850

39-
# Quick links
51+
`CalibrateEmulateSample.jl` solves parameter estimation problems using accelerated (and approximate) Bayesian inversion. Given an observation `y`, a computer model (forward map) `G`, observational noise covariance `Γ`, and broad prior information on the parameters `θ`, it returns the joint data-informed distribution of "`θ` given `y`" for `y = G(θ) + η`, `η ~ N(0, Γ)`. The framework is not inherently restricted to unimodal distributions and can be applied to computer models that are noisy or chaotic, non-differentiable, or that can only be treated as a black box (interfaced only through parameter files). As the name suggests, the package breaks the problem into three stages — calibration (via [EnsembleKalmanProcesses.jl](https://github.com/CliMA/EnsembleKalmanProcesses.jl)), emulation of the forward map, and sampling of the emulated posterior — following the approach described in [Cleary et al. (2020)](https://arxiv.org/pdf/2001.03689.pdf).
52+
53+
## Quick Links
4054

4155
- [I'm getting errors about the python dependency](https://clima.github.io/CalibrateEmulateSample.jl/dev/installation_instructions/)
4256
- [How do I build prior distributions?](https://clima.github.io/EnsembleKalmanProcesses.jl/dev/parameter_distributions/)
@@ -45,15 +59,25 @@ Implements a derivative-free machine-learning-accelerated pipeline for uncertain
4559
- [Where can I walk through the simple example?](https://clima.github.io/CalibrateEmulateSample.jl/dev/examples/sinusoid_example/)
4660
- [What is the `EnsembleKalmanProcesses.jl` package?](https://clima.github.io/CalibrateEmulateSample.jl/dev/calibrate/)
4761
- [What are the recommendations/defaults for dimension reduction or data processing?](https://clima.github.io/CalibrateEmulateSample.jl/dev/data_processing/)
48-
- [How to I plot or interpret the posterior distribution?](https://clima.github.io/CalibrateEmulateSample.jl/dev/sample/)
62+
- [How do I plot or interpret the posterior distribution?](https://clima.github.io/CalibrateEmulateSample.jl/dev/sample/)
63+
64+
## Features
65+
66+
- **Derivative-free Bayesian inversion**: learns the joint distribution over parameters `θ` given noisy observations `y = G(θ) + η`, without requiring gradients of the forward model `G`.
67+
- **Works with black-box forward models**: compatible with computer models that are noisy, chaotic, non-differentiable, or only interfaced through parameter files.
68+
- **Three-stage pipeline**: *Calibrate* with [EnsembleKalmanProcesses.jl](https://github.com/CliMA/EnsembleKalmanProcesses.jl), *Emulate* the forward map with a Gaussian Process or Random Feature interface, and *Sample* the emulated posterior with Markov chain Monte Carlo.
69+
- **Flexible emulators**: Gaussian Process and Random Feature emulator interfaces, with configurable kernel structures and input/output data encoding and decorrelation schedules.
70+
- **Dimension reduction and data processing**: recommended defaults for encoding, decorrelating, and reducing high-dimensional input-output pairs before emulation.
71+
- **Not restricted to unimodal posteriors**: supports flexible numbers of parameters and multimodal joint distributions.
4972

73+
## Quick Example
5074

51-
# What does it look like to use?
52-
Having installed CES and Plots, you can copy-paste the snippets below to recreate this random experiment (up to random number generation).
75+
Having installed CES and Plots, you can copy-paste the snippets below to recreate this random experiment (up to random number generation).
5376

5477
### Calibrate
78+
5579
Below we will outline the current user experience for using `EnsembleKalmanProcesses.jl`.
56-
We solve the classic inverse problem where we learn `y = G(u)`, noisy forward map `G` distributed as `N(0,Γ)`. For example,
80+
We solve the classic inverse problem where we learn `y = G(u)`, noisy forward map `G` distributed as `N(0,Γ)`. For example,
5781
```julia
5882

5983
using LinearAlgebra
@@ -79,7 +103,7 @@ using CalibrateEmulateSample.EnsembleKalmanProcesses.ParameterDistributions
79103

80104
prior_u1 = constrained_gaussian("positive_with_mean_2", 2, 1, 0, Inf)
81105
prior_u2 = constrained_gaussian("four_with_spread_5", 0, 3, -Inf, Inf, repeats=4)
82-
prior = combine_distributions([prior_u1, prior_u2])
106+
prior = combine_distributions([prior_u1, prior_u2])
83107

84108
N_ensemble = 50
85109
initial_ensemble = construct_initial_ensemble(prior, N_ensemble)
@@ -109,11 +133,10 @@ end
109133
display(p)
110134

111135
```
112-
We now hvae a quick and cheap estimate of the mode of the distribution here, but no quantified uncertainty. To postprocess in a way that gives us back uncertainty, we will emulate `G` using our current EKP evaluations, and apply a proper sampling algorithm to the emulator. No more evaluations of `G` are required!
136+
We now have a quick and cheap estimate of the mode of the distribution here, but no quantified uncertainty. To postprocess in a way that gives us back uncertainty, we will emulate `G` using our current EKP evaluations, and apply a proper sampling algorithm to the emulator. No more evaluations of `G` are required!
113137
![quick-readme-calibrate](docs/src/assets/readme_calibrate.png)
114138

115-
116-
# Emulate
139+
### Emulate
117140

118141
We then set up the emulation framework, by getting input-output pairs from the EKP, defining which emulator to use, and defining what space we will train our emulator in. Here, we take a Random Feature emulator, and we decorrelate the training space, using prior (input) and noise (output) covariances. *This stage can take several minutes.*
119142
```julia
@@ -200,8 +223,7 @@ display(pp)
200223
```
201224
![quick-readme-emulate](docs/src/assets/readme_emulate.png)
202225

203-
204-
# Sample
226+
### Sample
205227

206228
Having created a suitable emulator, we can pass everything into the sampler, here a random walk metropolis algorithm (MCMC). We find a suitable step size and then draw 100,000 samples from the emulator-based posterior.
207229
```julia
@@ -227,9 +249,8 @@ end
227249
display(ppp)
228250
```
229251

230-
We see that the approximate posterior contains both EKI and the true parameter, and that the the parameter `four_with_spread_5(dim 4)` is highly constrained, while `four_with_spread_5(dims 1)` and `(dim 4)` are least constrained by the observations, coinciding with the EKI performance. More detail on correlation structure can be extracted by pair-plotting, and posterior analysis.
252+
We see that the approximate posterior contains both EKI and the true parameter, and that the parameter `four_with_spread_5(dim 4)` is highly constrained, while `four_with_spread_5(dims 1)` and `(dim 4)` are least constrained by the observations, coinciding with the EKI performance. More detail on correlation structure can be extracted by pair-plotting, and posterior analysis.
231253

232254
![quick-readme-sample](docs/src/assets/readme_sample.png)
233255

234-
235-
256+
More runnable examples (Sinusoid, Lorenz, Cloudy, Darcy, EDMF, GCM, and dimension-reduction configurations) are in the [`examples/`](examples/) directory.

0 commit comments

Comments
 (0)