





'''simple docstring'''




def _lowerCAmelCase     (      _lowerCAmelCase    )->     List[str]:

 '''simple docstring'''





 __UpperCAmelCase					=   0

 # if input_string is "aba" than new_input_string become "a|b|a"
 __UpperCAmelCase					=   """"""
 __UpperCAmelCase					=   """"""

 # append each character + "|" in new_string for range(0, length-1)
 for i in input_string[: len(_lowerCAmelCase    ) - 1]:
  new_input_string += i + "|"
 # append last character
 new_input_string += input_string[-1]

 # we will store the starting and ending of previous furthest ending palindromic
 # substring
 __UpperCAmelCase					=   0, 0

 # length[i] shows the length of palindromic substring with center i
 __UpperCAmelCase					=   [1 for i in range(len(_lowerCAmelCase    )    )]

 # for each character in new_string find corresponding palindromic string
 __UpperCAmelCase					=   0
 for j in range(len(_lowerCAmelCase    )    ):
  __UpperCAmelCase					=   1 if j > r else min(length[l + r - j] // 2       ,    r - j + 1    )
  while (
      j - k >= 0
      and j + k < len(_lowerCAmelCase    )
      and new_input_string[k + j] == new_input_string[j - k]
  ):
   k += 1

  __UpperCAmelCase					=   2 * k - 1

  # does this string is ending after the previously explored end (that is r) ?
  # if yes the update the new r to the last index of this
  if j + k - 1 > r:
   __UpperCAmelCase					=   j - k + 1  # noqa: E741
   __UpperCAmelCase					=   j + k - 1

  # update max_length and start position
  if max_length < length[j]:
   __UpperCAmelCase					=   length[j]
   __UpperCAmelCase					=   j

    # create that string
 __UpperCAmelCase					=   new_input_string[start - max_length // 2 : start + max_length // 2 + 1]
 for i in s:
  if i != "|":
   output_string += i

 return output_string


if __name__ == "__main__":
    import doctest

    doctest.testmod()












'''simple docstring'''




import math

import numpy as np
import qiskit
from qiskit import Aer, ClassicalRegister, QuantumCircuit, QuantumRegister, execute







def _lowerCAmelCase     (      _lowerCAmelCase = 3    )->     qiskit.result.counts.Counts:
 if isinstance(_lowerCAmelCase       ,    _lowerCAmelCase    ):
  raise TypeError('number of qubits must be a integer.'    )
 if number_of_qubits <= 0:
  raise ValueError('number of qubits must be > 0.'    )
 if math.floor(_lowerCAmelCase    ) != number_of_qubits:
  raise ValueError('number of qubits must be exact integer.'    )
 if number_of_qubits > 10:
  raise ValueError('number of qubits too large to simulate(>10).'    )

 __UpperCAmelCase					=   QuantumRegister(_lowerCAmelCase       ,    'qr'    )
 __UpperCAmelCase					=   ClassicalRegister(_lowerCAmelCase       ,    'cr'    )

 __UpperCAmelCase					=   QuantumCircuit(_lowerCAmelCase       ,    _lowerCAmelCase    )

 __UpperCAmelCase					=   number_of_qubits

 for i in range(_lowerCAmelCase    ):
  quantum_circuit.h(number_of_qubits - i - 1    )
  counter -= 1
  for j in range(_lowerCAmelCase    ):
   quantum_circuit.cp(np.pi / 2 ** (counter - j)       ,    _lowerCAmelCase       ,    _lowerCAmelCase    )

 for k in range(number_of_qubits // 2    ):
  quantum_circuit.swap(_lowerCAmelCase       ,    number_of_qubits - k - 1    )

 # measure all the qubits
 quantum_circuit.measure(_lowerCAmelCase       ,    _lowerCAmelCase    )
 # simulate with 10000 shots
 __UpperCAmelCase					=   Aer.get_backend('qasm_simulator'    )
 __UpperCAmelCase					=   execute(_lowerCAmelCase       ,    _lowerCAmelCase       ,    shots=1_00_00    )

 return job.result().get_counts(_lowerCAmelCase    )


if __name__ == "__main__":
    print(
        F"""Total count for quantum fourier transform state is: \
    {quantum_fourier_transform(3)}"""
    )





