Can any existing software be used (either directly or with a bit of persuading) to work with general stabilizer groups? From what I can see, tableau-based options like Stim and Qiskit can be used to work with stabilizer groups over $n$ qubits with minimal generating sets of size $n$ (i.e. stabilizer states), but not with stabilizer groups of the form $S = \langle s_1, \ldots, s_m \rangle$, where $m < n$. Is this right? Are there other packages out there?
EDIT: As an example, the kind of things I want to be able to do are:
- Initialise a stabilizer group, by specifying generators and number of qubits they operate on.
- Ask whether a Pauli $p$ is a member of a stabilizer group.
- Determine the effect on the group of measuring a Pauli $p$.
- Determine the effect on the group of conjugating by a Clifford $c$.
What I've tried: with Stim, I can initialise a TableauSimulator and perform Pauli measurements and Clifford conjugations, but if I try and think of this tableau as a stabilizer group on $n$ qubits, it always assumes the group is initially generated by $Z_1, \ldots, Z_n$. e.g. If I do the following:
# Initialise a tableau on n=2 qubits, and measure X_1
tableau = TableauSimulator()
tableau.measure_observable(PauliString("XI"))
I'd like to get a group generated by just $\pm X_1$. But instead I get a group generated by $\pm X_1$ and $Z_2$, as shown by:
print(tableau.canonical_stabilizers())
# Output:
[stim.PauliString("-X_"), stim.PauliString("+_Z")]
With Qiskit, I'm not even sure where to start!