docs: def _kak_decomposition_to_operations(q0: ops.Qid,
                                       q1: ops.Qid,
                                       kak: linalg.KakDecomposition,
                                       allow_partial_czs: bool,
                                       atol: float = 1e-8
                                       ) -> List[ops.Operation]:
      """Assumes that the decomposition is canonical."""
      b0, b1 = kak.single_qubit_operations_before
      pre = [_do_single_on(b0, q0, atol=atol), _do_single_on(b1, q1, atol=atol)]
      a0, a1 = kak.single_qubit_operations_after
      post = [_do_single_on(a0, q0, atol=atol), _do_single_on(a1, q1, atol=atol)]
  
      return list(cast(Iterable[ops.Operation], ops.flatten_op_tree([
          pre,
          _non_local_part(q0,
                          q1,
                          kak.interaction_coefficients,
                          allow_partial_czs,
                          atol=atol),
          post,
      ])))