Iterable Permutation#

permute_iterable(iterable, perm)[source]#

Applies an arbitrary permutation to an iterable with logarithmic depth.

Parameters:
iterableQuantumArray or List[QuantumVariable] or QuantumVariable or List[Qubit]

The iterable to perform the permutation on.

permList[integer]

A list specifying the permutation.

Examples

We create a QuantumArray containing increments and apply a specified permutation.

>>> from qrisp import QuantumFloat, QuantumArray, permute_iterable
>>> import numpy as np
>>> qa = QuantumArray(QuantumFloat(3), 8)
>>> qa[:] = np.arange(8)
>>> permute_iterable(qa, perm = [1,0,3,7,5,2,6,4])
>>> print(qa)
{OutcomeArray([1, 0, 3, 7, 5, 2, 6, 4]): 1.0}
>>> print(qa.qs)
QuantumCircuit:
--------------
  qa.0: ────────────X──────────────────────
                    │                      
  qa.1: ──────X─────┼──────────────────────
              │     │                      
  qa.2: ──────┼──X──┼──────────────────────
        ┌───┐ │  │  │                      
qa_1.0: ┤ X ├─┼──┼──X──────────────────────
        └───┘ │  │                         
qa_1.1: ──────X──┼─────────────────────────
                 │                         
qa_1.2: ─────────X─────────────────────────

qa_2.0: ───────────────────────────X───────
        ┌───┐                      │       
qa_2.1: ┤ X ├──────────────────────┼──X────
        └───┘                      │  │    
qa_2.2: ───────────────────────────┼──┼──X─
        ┌───┐                      │  │  │ 
qa_3.0: ┤ X ├──────────X───────────┼──┼──┼─
        ├───┤          │           │  │  │ 
qa_3.1: ┤ X ├──────────┼──X────────┼──┼──┼─
        └───┘          │  │        │  │  │ 
qa_3.2: ───────────────┼──┼──X─────┼──┼──┼─
                       │  │  │     │  │  │ 
qa_4.0: ──────X────────┼──┼──┼─────┼──┼──┼─
              │        │  │  │     │  │  │ 
qa_4.1: ──────┼──X─────┼──┼──┼─────┼──┼──┼─
        ┌───┐ │  │     │  │  │     │  │  │ 
qa_4.2: ┤ X ├─┼──┼──X──┼──┼──┼─────┼──┼──┼─
        ├───┤ │  │  │  │  │  │     │  │  │ 
qa_5.0: ┤ X ├─X──┼──┼──┼──┼──┼──X──X──┼──┼─
        └───┘    │  │  │  │  │  │     │  │ 
qa_5.1: ─────────X──┼──┼──┼──┼──┼──X──X──┼─
        ┌───┐       │  │  │  │  │  │     │ 
qa_5.2: ┤ X ├───────X──┼──┼──┼──┼──┼──X──X─
        └───┘          │  │  │  │  │  │    
qa_6.0: ───────────────┼──┼──┼──┼──┼──┼────
        ┌───┐          │  │  │  │  │  │    
qa_6.1: ┤ X ├──────────┼──┼──┼──┼──┼──┼────
        ├───┤          │  │  │  │  │  │    
qa_6.2: ┤ X ├──────────┼──┼──┼──┼──┼──┼────
        ├───┤          │  │  │  │  │  │    
qa_7.0: ┤ X ├──────────X──┼──┼──X──┼──┼────
        ├───┤             │  │     │  │    
qa_7.1: ┤ X ├─────────────X──┼─────X──┼────
        ├───┤                │        │    
qa_7.2: ┤ X ├────────────────X────────X────
        └───┘                              
Live QuantumVariables:
---------------------
QuantumFloat qa
QuantumFloat qa_1
QuantumFloat qa_2
QuantumFloat qa_3
QuantumFloat qa_4
QuantumFloat qa_5
QuantumFloat qa_6
QuantumFloat qa_7