# Iterable Shifting#

cyclic_shift(iterable, shift_amount=1)[source]#

Performs a cyclic shift of the values of an iterable with logarithmic depth. The shifting amount can be specified.

Parameters
iterablelist[Qubit] or list[QuantumVariable] or QuantumArray

The iterable to be shifted.

shift_amountinteger or QuantumFloat, optional

The iterable will be shifted by that amount. The default is 1.

Examples

We create a QuantumArray, initiate a sequence of increments and perform a cyclic shift.

>>> from qrisp import QuantumFloat, QuantumArray, cyclic_shift
>>> import numpy as np
>>> qa = QuantumArray(QuantumFloat(3), 8)
>>> qa[:] = np.arange(8)
>>> cyclic_shift(qa, shift_amount = 2)
>>> print(qa)
{OutcomeArray([6, 7, 0, 1, 2, 3, 4, 5]): 1.0}

We do something similar to demonstrate the shift by quantum values. For this we initiate a QuantumFloat in the superposition of 0, 1 and -3.

>>> shift_amount = QuantumFloat(3, signed = True)
>>> shift_amount[:] = {0 : 3**-0.5, 1: 3**-0.5, -3 : 3**-0.5}
>>> qa = QuantumArray(QuantumFloat(3), 8)
>>> qa[:] = np.arange(8)
>>> cyclic_shift(qa, shift_amount)
>>> print(qa)
{OutcomeArray([0, 1, 2, 3, 4, 5, 6, 7]): 0.3333, OutcomeArray([7, 0, 1, 2, 3, 4, 5, 6]): 0.3333, OutcomeArray([3, 4, 5, 6, 7, 0, 1, 2]): 0.3333}