Skip to content

Bundled datasets

KD ships a catalog of benchmark datasets with known equations, so you can try an algorithm out before pointing it at data of your own, and two sets of laboratory measurements to run against real data.

Load a dataset

Each dataset has a convenience loader that hands back an object fit() accepts directly:

import kd

dataset = kd.load_burgers()
print(dataset.name, dataset.get_shape())
burgers (256, 201)

You can also go through the catalog by id. kd.list_datasets() returns every entry, and kd.get_dataset(id) returns one entry's metadata: the equation, the axes, the left-hand side, the file format, the source, the license, and a pointer to its loader. The data itself arrives only when you call spec.loader().

import kd

spec = kd.get_dataset("kdv")
print(spec.id, spec.tier, spec.axes, spec.lhs)

dataset = spec.loader()
print(dataset.name, dataset.get_shape())
kdv builtin ('x', 't') u_t
kdv (256, 201)

Bundled and downloaded datasets

Entries come in two kinds, recorded in the tier field:

  • builtin: the data file is installed with the package, and loading it touches no network.
  • remote: the file is fetched from the Hugging Face Hub the first time you load it. The fetch is pinned to a fixed file at a fixed revision and verified against a recorded sha256; a mismatch deletes the cached copy and raises. Once verified, the file stays in the local cache and later loads read it from there. This path needs the optional dependency: pip install kd[hub].

kd.list_remote_datasets() lists only the remote ones. kd.load_from_hub(dataset_id, cache_dir=..., offline=...) loads a remote dataset by id, with cache_dir choosing where the cache lives and offline=True restricting it to files already cached.

For the shape requirements and the left-hand-side spec, see data requirements.

Dataset catalog

Dataset Equation Axes Left-hand side Availability Source
allen-cahn u_t = 0.003 * u_xx + u - u^3 x, t u_t bundled EqGPT benchmark data (Xu et al. 2025)
burgers u_t = -u * u_x + 0.1 * u_xx x, t u_t bundled SGA-PDE benchmark data (Chen et al. 2022)
burgers-2d u_t = -u*u_x - u*u_y + 0.01*u_xx + 0.01*u_yy x, y, t u_t bundled EqGPT benchmark data (Xu et al. 2025)
chafee-infante u_t = u_xx - u + u^3 x, t u_t bundled SGA-PDE benchmark data (Chen et al. 2022)
convection-diffusion u_t = -u_x + 0.25 * u_xx x, t u_t bundled EqGPT benchmark data (Xu et al. 2025)
eq-6-2-12 u_t = -0.1*u_x_t - 0.1*u_x x, t u_t bundled EqGPT benchmark data (Xu et al. 2025)
eqgpt-laplacian-eitech u_xx + u_yy + 1 = 0 x, y none (steady problem) bundled EqGPT benchmark data (Xu et al. 2025)
eqgpt-laplacian-smile u_xx + u_yy = 0 x, y none (steady problem) bundled EqGPT benchmark data (Xu et al. 2025)
eqgpt-poisson-disk u_xx + u_yy = 0 x, y none (steady problem) bundled EqGPT benchmark data (Xu et al. 2025)
kdv u_t = -u * u_x - 0.0025 * u_xxx x, t u_t bundled SGA-PDE benchmark data (Chen et al. 2022)
klein-gordon u_tt = 0.5 * u_xx - 5 * u x, t u_tt bundled EqGPT benchmark data (Xu et al. 2025)
llm4ed-fisher u_t = 0.02*u_xx + 10*u*(1-u) x, t u_t downloaded on first use LLM4ED benchmark data (Du et al. 2024)
llm4ed-fisher-nonlinear u_t = 0.02*(u*u_xx + u_x^2) + 10*u*(1-u) x, t u_t downloaded on first use LLM4ED benchmark data (Du et al. 2024)
llm4ed-heat u_t = 0.05*u_xx x, t u_t downloaded on first use Heat case; coefficient fitted from the data
pde-compound u_t = u * u_xx + u_x^2 x, t u_t bundled SGA-PDE benchmark data (Chen et al. 2022)
pde-divide u_t = -u_x / x + 0.25 * u_xx x, t u_t bundled SGA-PDE benchmark data (Chen et al. 2022)
wave u_tt = u_xx x, t u_tt bundled EqGPT benchmark data (Xu et al. 2025)

Real-world measurements

Two datasets of laboratory measurements ship alongside the benchmarks. Both are tables of observations rather than fields on a regular grid, so they load as kd.TabularDataset and are not entries of the catalog above.

kd.load_tlc_cc() holds 74 rows from an automated column-chromatography platform, which separated 192 organic compounds on 4 g silica columns with thin-layer chromatography giving the retardation factor of each compound and eluent pair. Each row is one experimental condition rather than one compound: the features are the retardation factor R_F and the petroleum-ether fraction r of the eluent, and the target is the retention volume averaged over the compounds run at that condition, either the volume at which a compound is first detected (target="start") or the volume at which it has fully eluted (target="end").

kd.load_wave_breaking() holds surface-elevation measurements from the 27.2 m glass-walled wave tank at Imperial College London: focused wave groups propagating toward breaking, with the air-water interface reconstructed frame by frame from three cameras running at 20 Hz. The features are the time t and the position x along the tank; the target is the surface elevation eta. The points are scattered rather than gridded, and the three camera windows do not overlap, so x covers three disjoint intervals. One experiment of the campaign is bundled, 314,478 points, and data_dir= points the loader at the others.

Both datasets are published measurements, used with the permission of the authors: the chromatography platform in Xu, Wu, Chen, Zhang and Mo, Nat Commun 16, 832 (2025), and the wave-tank campaigns in Xu, Chen, Cao, Tang, Du, Li, Callaghan and Zhang, Nat Commun 16, 10255 (2025). Breaking waves is a worked run on the wave data.