TL;DR We pre-train one autoencoder on synthetic functions only, freeze it, and reuse its latent space for every operator. It reconstructs PDE solutions and photographs on geometries it never saw, its latent space is interpretable, and operators trained on cached embeddings match or beat end-to-end models at a fraction of the cost.
One autoencoder, trained without labels, turns any function on any point cloud into embeddings on a hypersphere and back. The four steps below run on the real model, the first three on the paper's 8-dimensional backbone so that every embedding can be shown in full; click a step to jump to it.
An incompressible flow (IEU-BB, velocity u) evolves over 20 steps. Every K-th snapshot is an anchor; every state in between is decoded from the great circle (SLERP) between the two nearest anchor embeddings, without any operator. On the globe, the physical evolution traces a curve, and the geodesics cut across it.
Between anchors close in time, the geodesic stays within a few percent of the true flow: the embedding preserves the geometry of the evolution. Spread the anchors (K = 10) and the shortcut drifts off the physical path: over longer intervals, following the physical path is the job of a learned operator.
Trained only on smooth analytic functions on a disk, the same weights reconstruct shocks, shear layers, waves, stresses around holes, and photographs. Drag across a panel to compare the input with its reconstruction, and switch the number of partitions to watch the detail come in.
Errors are measured at the input points. The elasticity fields on point clouds have 10,000 points, so they are shown with at most 128 partitions, as in the paper. Photographs from Wikimedia Commons; credits.
The chord between the embeddings of two anchor fields that differ by one operation is a direction. Added to the embedding of a different field, it applies the same operation. Scroll over the field or drag the slider.
z → |z| (z + c d) / |z + c d|, decoded with the identity frame on a square grid, each strip on its own colour scale, so only the shape changes. Apply it to your own field →
Partitions and their normalization carry a field into the familiar band of the training functions, provided it is sampled finely enough to be partitioned, so one backbone serves fluids, solids, waves and images on unseen geometries.
The representation is exactly equivariant to translation, dilation and amplitude: the static frame stores them, the embedding carries only the shape.
The whole latent space is used and decodes to valid fields, latent distances preserve the order of distances between the decoded fields, geodesics interpolate evolutions, and edit directions transfer. More →
A dataset is encoded once and an operator trains on cached embeddings. Latent rollouts run up to 10× faster than re-encoding at every step (up to 9.6× faster than the best baseline on variable point clouds), and a 101M-parameter processor trains on 262k-point functions on one consumer GPU. More →
Eight demos run the frozen 128-dimensional analysis backbone on a small CPU server. Every demo comes with pre-computed samples that show at once; your own inputs are queued and run one at a time.
Push a field or an image along diffusion, stretching, splitting and more.
Walk the great circle between the embeddings of two fields.
Decode a field on a finer grid than it was encoded on.
Type any function f(x, y) or paint one, choose the points and partitions, and see what the model makes of it.
Drop pixels or paint holes; only what is left is encoded, and every pixel decoded.
A is to B as C is to ?, each as one embedding, with fields you pick, paint or upload.
Paint or pick a field and find the nearest of 3,000 functions of 500 families in the latent space.
Encode a field as one embedding, turn it a little in random directions, and decode a family of plausible variants.
@article{mousavi2026daedalus,
title = {Self-Supervised Learning of Universal Latent Spaces for Operator Learning},
author = {Mousavi, Sepehr and Lingsch, Levi and Mishra, Siddhartha and De Lorenzis, Laura},
journal = {arXiv preprint (placeholder)},
year = {2026}
}