## geometry_contract()


Human-readable spec of every geometry array expected for `dims`.


Usage

``` python
geometry_contract(
    dims,
    *,
    rings_in_fov=False,
    edge_on=False,
)
```


Shapes are given in **numpy order** - the order the arrays must actually have in memory. That is the reverse of the `TDIM` order the proposal writes, because FITS lists the fastest-varying axis first and numpy lists it last. Getting this backwards is the easiest mistake to make here, so both are shown.

`nrows` is per-HDU: one row per body for `SC_GEOM`, one per *resolved* body for `BODY_GEOM`, and exactly one for the singleton tables.
