# Input format

## Oriented Knot Atlas-style PD input

```json
{
  "format": "katlas-pd",
  "name": "L8n5",
  "pd": [[6,1,7,2], [5,12,6,13], [8,4,9,3], [2,14,3,13],
         [14,7,15,8], [9,16,10,11], [11,10,12,5], [4,15,1,16]],
  "drop_redundant_relation": true,
  "component_order": [1,2,3]
}
```

`X_{i,j,k,l}` is read from the incoming lower edge counterclockwise. Labels
must be exactly `1,...,2c`, each occurring twice. The labels encode the
orientations. By default, components are ordered by their smallest edge label.
`component_order` is a one-based permutation listing the old components in the
new order.

One Wirtinger relation is dropped only when the projection graph is connected.
Use `drop_redundant_relation:false` to retain every crossing relation.

## Finite presentation input

```json
{
  "format": "presentation",
  "name": "commutator",
  "generators": ["x1", "x2"],
  "relators": [[1,2,-1,-2]],
  "images": [[1,0], [0,1]],
  "variables": ["t1", "t2"]
}
```

In a relator, `j` denotes the `j`th generator and `-j` its inverse. The `j`th
row of `images` is the exponent vector of the `j`th generator. The program
checks that the map is onto the stated free abelian lattice and that every
relator maps to zero.
