KeOpsΒΆ

For large datasets, setting use_keops=True represents pairwise costs and transport plans symbolically with KeOps LazyTensors.

model = Champollion(use_keops=True)

In KeOps mode, the Sinkhorn potentials remain ordinary torch tensors, but result.cost and result.plan may be symbolic objects.

result.cost_is_symbolic
result.plan_is_symbolic

High-level operations such as annotation transfer, barycentric projection, and top matches are designed to work with symbolic plans when possible.

Dense materialization is explicit and guarded by a size limit:

dense_plan = result.materialize_plan(max_entries=50_000 * 50_000)

Increase max_entries only when you intentionally want to allocate the full dense matrix.