## `eigenkit.core.draw`

Text drawer for `CircuitSpec`, which does not depend on the provider.

It draws the circuit as a string of several lines:

```text
q_0: ──RX(x_0)──RZ(w_0)──●──H──
                         │
q_1: ──RY(x_1)───────────X─────
```

A single-qubit gate is drawn as a `NAME(param)` label on its wire. A controlled-NOT (CNOT) gate is drawn as `●` on the control and `X` on the target, with `│` connectors between the wires that it spans.

Parameter expressions are drawn as symbols:

```text
Constant(0.5)              -> "0.5"
WeightRef(3)               -> "w_3"
InputRef(0)                -> "x_0"
Scale(InputRef(0), 2*pi)   -> "6.28*x_0"
Negate(WeightRef(0))       -> "-w_0"
Sum((w_0, x_0))            -> "w_0+x_0"
Multiply(w_0, x_0)         -> "w_0*x_0"
```

### `draw_text(spec, *, decimals=3)`

Draw `spec` as text on several lines.

The text is made of American Standard Code for Information Interchange (ASCII) characters and a few box-drawing characters.

Parameters:

| Name       | Type          | Description                                                      | Default    |
| ---------- | ------------- | ---------------------------------------------------------------- | ---------- |
| `spec`     | `CircuitSpec` | The CircuitSpec to draw.                                         | *required* |
| `decimals` | `int`         | The number of significant digits of constant angles. Default: 3. | `3`        |

Returns:

| Type  | Description                                            |
| ----- | ------------------------------------------------------ |
| `str` | The drawing, as a string. Print it to see the circuit. |
