Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Need explanation on how the pauli preparation basis works #1492

Open
KangHaiYue opened this issue Nov 16, 2024 · 3 comments
Open

Need explanation on how the pauli preparation basis works #1492

KangHaiYue opened this issue Nov 16, 2024 · 3 comments
Labels
documentation Improvements or additions to documentation

Comments

@KangHaiYue
Copy link

I was looking at PauliPreparationBasis for ProcessTomography. However, it is unclear to me how those bases will eventually be used to construct the channel matrix elements (i.e. for arbitrary basis |n><m|). Would anyone be able to add the citation to the paper where this comes from or explain that in the document?

image

@KangHaiYue KangHaiYue added the documentation Improvements or additions to documentation label Nov 16, 2024
@wshanks
Copy link
Collaborator

wshanks commented Nov 17, 2024

The preparation basis is somewhat described in the Standard Quantum Process Tomography section of this review by Mohsenl et al 2007. It is just the simplest set of preparations to perform, at least for superconducting qubits -- ground, excited, and then two orthogonal states on the equator of the Bloch sphere.

I am not sure at which level you are asking about how the preparation states are used. The tomography code generally follows the maximum likelihood estimation approach described in the Wikipedia article on quantum tomography. Using the linearly independent state preparations and measurements, the code sets up a large optimization problem to solve for the matrix that best matches the measurement data.

@KangHaiYue
Copy link
Author

The preparation basis is somewhat described in the Standard Quantum Process Tomography section of this review by Mohsenl et al 2007.

Thank you Will for providing this information. This is exactly what I was confused about: According to this paper, |m><n| is constructed from |m><m|, |n><n|, |+><+|, and |-><-|. The former two are pretty clear as they can be prepared using 'Zp' and 'Zm' from the screenshot of the table above. However, |+>=(|m>+|n>)/sqrt(2) is an entangled state for many qubits (and so does for |->), which is not equivalent to n copies of |+> for single-qubit. But from that table, it seems the preparation is only local (Xp and Yp). Moreover, I think they probably missed an 'i' before |-><-| in the paper: |m><n| = |+><+|+i|-><-|-(1+i)/2*(|m><m|+|n><n|).

image

@wshanks
Copy link
Collaborator

wshanks commented Nov 18, 2024

Interesting. I see your point about many qubits. I had only been thinking about the single qubit case. The PauliPreparationBasis table only shows the case for a single qubit. When there are multiple qubits, those preparations are performed on each qubit independently, so for two qubits there will be 16 preparations corresponding to indices 0-3 on each qubit. I think this can be seen in TomographyExperiment._basis_indices here:

if self._prep_circ_basis:
prep_shape = self._prep_circ_basis.index_shape(self._prep_physical_qubits)
prep_elements = product(*[range(i) for i in prep_shape])

which is called by the circuits() method. I suppose one could define a basis that returned a shape that was not tuple(2 for _ in range(len(num_qubits))) but the only current definition of index_shape is in the LocalPreparationBasis class:

def index_shape(self, qubits: Sequence[int]) -> Tuple[int, ...]:
return len(qubits) * (self._size,)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

2 participants