---
title: Facade layout verify
source: https://infrared.city/docs/sdk/1.0/python/facade_layout_verify/
---

# Facade layout verify

Verify a rebuilt or reloaded `FacadeLayout` against a live `SurfaceColumns`.

`attach_values` is the safety check to run before showing results on a rebuilt layout. It only verifies: it does not synthesize anything.

## attach_values

```python
attach_values(
layout: "FacadeLayout", columns: Any, *, expected_layout_key: str
) -> Any
```

Verify a layout against a live or reloaded `SurfaceColumns`.

The check refuses a mismatch. It first compares `layout.layout_key` with `expected_layout_key`, which covers the geometry, the synthesis parameters, the surfgrid version and the core version, so a rebuild whose geometry drifted gets a different key. This catches even a change too small to move a frame's origin, axes or grid, such as a small hole inside a cell that is still present.

Two further checks guard against a `columns` mismatch the key alone cannot catch, such as the wrong surface entirely. They join by surface id, never by row, so the row order of `columns` does not have to match the job and frame order of `layout`. For every frame the layout names, this checks that:

1. `columns` has that surface;
2. its origin, axes and grid dimensions agree with the layout's, within float rounding;
3. its cell layout -- which grid cells actually have a sensor, in canonical row-major order -- matches exactly. `columns.has_value` is False for a grid cell with no sensor, one entry per cell in the order `frame.cells` uses, so presence is compared exactly.

Store `layout_key` with every result so you can pass it back here later.

Warnings

Never read `expected_layout_key` off `layout` itself: that checks nothing, because a layout always agrees with its own key.

Parameters:

| Name | Type | Description | Default |
| --- | --- | --- | --- |
| `layout` | `[FacadeLayout](../facade_layout/#infrared_sdk.facade_layout.FacadeLayout)` | The rebuilt or reloaded layout. | *required* |
| `columns` | `SurfaceColumns` | The surface columns of the result to verify against. | *required* |
| `expected_layout_key` | `str` | The `layout_key` stored alongside the result when it first ran. | *required* |

Returns:

| Type | Description |
| --- | --- |
| `SurfaceColumns` | `columns`, unchanged. This function only verifies. |

Raises:

| Type | Description |
| --- | --- |
| `ValueError` | If the layout key differs, if frame keys are not unique across the layout, or if a surface of the layout is missing from `columns` or differs in geometry or cell layout. |
