docs: def residue_network():
      """The network for the residue example.
  
      Current and previous state are all nodes OFF.
  
      Diagram::
  
                  +~~~~~~~+         +~~~~~~~+
                  |   A   |         |   B   |
              +~~>| (AND) |         | (AND) |<~~+
              |   +~~~~~~~+         +~~~~~~~+   |
              |        ^               ^        |
              |        |               |        |
              |        +~~~~~+   +~~~~~+        |
              |              |   |              |
          +~~~+~~~+        +~+~~~+~+        +~~~+~~~+
          |   C   |        |   D   |        |   E   |
          |       |        |       |        |       |
          +~~~~~~~+        +~~~~~~~+        +~~~~~~~+
  
      Connectivity matrix:
  
      +---+---+---+---+---+---+
      | . | A | B | C | D | E |
      +---+---+---+---+---+---+
      | A | 0 | 0 | 0 | 0 | 0 |
      +---+---+---+---+---+---+
      | B | 0 | 0 | 0 | 0 | 0 |
      +---+---+---+---+---+---+
      | C | 1 | 0 | 0 | 0 | 0 |
      +---+---+---+---+---+---+
      | D | 1 | 1 | 0 | 0 | 0 |
      +---+---+---+---+---+---+
      | E | 0 | 1 | 0 | 0 | 0 |
      +---+---+---+---+---+---+
      """
      tpm = np.array([
          [int(s) for s in bin(x)[2:].zfill(5)[::-1]] for x in range(32)
      ])
      tpm[np.where(np.sum(tpm[0:, 2:4], 1) == 2), 0] = 1
      tpm[np.where(np.sum(tpm[0:, 3:5], 1) == 2), 1] = 1
      tpm[np.where(np.sum(tpm[0:, 2:4], 1) < 2), 0] = 0
      tpm[np.where(np.sum(tpm[0:, 3:5], 1) < 2), 1] = 0
  
      cm = np.zeros((5, 5))
      cm[2:4, 0] = 1
      cm[3:, 1] = 1
  
      return Network(tpm, cm=cm, node_labels=LABELS[:tpm.shape[1]])