Skip to content

Implement more decoherence functions/helpers #662

@TysonRayJones

Description

@TysonRayJones

The following hypothetical channels offer optimised implementations compatible with QuEST's distribution strategy.

  • mixPauliStr(Qureg, qreal p, PauliStr) which effects $\rho \rightarrow (1-p)\rho + p \hat{\sigma}\rho\hat{\sigma}^\dagger$ where $\hat{\sigma}$ is an any-target PauliStr. This corresponds to superoperator $S=(1-p)I\otimes I + p (\hat{\sigma}^* \otimes \hat{\sigma})$ which we would not instantiate (unlike how mixKrausMap() operates). Instead, we trivially prepare $\hat{\sigma}' = \hat{\sigma} \otimes \hat{\sigma}$ (in $O(1)$ bit operations), set $p' = \pm p$ (negative when $\hat{\sigma}$ contains an odd number of $Y$ operators) and require the backend to effect $\alpha_i$ via $\alpha_i \rightarrow p' \beta_i + (1-p)\alpha_i$ where $\beta_i$ is the pair amplitude induced by $\hat{\sigma}'$. Such a backend subroutine already exists as used by Pauli gadgets! 🎉

    We alas cannot extend this to a sum of PauliStr since if any differ in their prefix Paulis (beyond $\hat{X} \leftrightarrow \hat{Y}$ and $\hat{I} \leftrightarrow \hat{Z}$), then each node requires more amplitudes than can fit in its communication buffer.

  • setUnitaryKrausMap(KrausMap, qreal* probs, CompMatr* unitaries) which initialises the KrausMap to $\{ \sqrt{1-\sum probs} I, \sqrt{probs[i]} unitaries[i] \}$ such that its subsequent operation via mixKrausMap effects $\rho \rightarrow (1-\sum probs) + \sum_i probs[i] u_i \rho u_i^\dagger $, i.e. a "random unitary channel" (convex combination of unitary maps).

Note a similar-spirited strategy to mixPauliStr for mixing a single unitary (as CompMatr) is not possible. Channel $\rho \rightarrow (1-p)\rho + p \hat{U}\rho\hat{U}^\dagger$ has superoperator $S=(1-p)I\otimes I + p (\hat{U}^* \otimes \hat{U})$. Avoiding instantiating matrix $\hat{U}^* \otimes \hat{U}$ (which would otherwise have similar performance to wrappingmixKrausMap()) while effecting $S$ in one step (so that term $(1-p)I\otimes I$ is handled in-place) requires tediously bespoke, if at all possible.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions