{"record":{"id":"783b0bd0fef546a8","repo":"TheAlgorithms/Python","slug":"number-of-qubits-must-be-exact-integer","errorCode":null,"errorMessage":"number of qubits must be exact integer.","messagePattern":"number of qubits must be exact integer\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"quantum/q_fourier_transform.py","lineNumber":63,"sourceCode":"    >>> quantum_fourier_transform('a')\n    Traceback (most recent call last):\n        ...\n    TypeError: number of qubits must be a integer.\n    >>> quantum_fourier_transform(100)\n    Traceback (most recent call last):\n        ...\n    ValueError: number of qubits too large to simulate(>10).\n    >>> quantum_fourier_transform(0.5)\n    Traceback (most recent call last):\n        ...\n    ValueError: number of qubits must be exact integer.\n    \"\"\"\n    if isinstance(number_of_qubits, str):\n        raise TypeError(\"number of qubits must be a integer.\")\n    if number_of_qubits <= 0:\n        raise ValueError(\"number of qubits must be > 0.\")\n    if math.floor(number_of_qubits) != number_of_qubits:\n        raise ValueError(\"number of qubits must be exact integer.\")\n    if number_of_qubits > 10:\n        raise ValueError(\"number of qubits too large to simulate(>10).\")\n\n    qr = QuantumRegister(number_of_qubits, \"qr\")\n    cr = ClassicalRegister(number_of_qubits, \"cr\")\n\n    quantum_circuit = QuantumCircuit(qr, cr)\n\n    counter = number_of_qubits\n\n    for i in range(counter):\n        quantum_circuit.h(number_of_qubits - i - 1)\n        counter -= 1\n        for j in range(counter):\n            quantum_circuit.cp(np.pi / 2 ** (counter - j), j, counter)\n\n    for k in range(number_of_qubits // 2):\n        quantum_circuit.swap(k, number_of_qubits - k - 1)","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/TheAlgorithms/Python/blob/f5988cc09713315817df6a7e327e258013a94440/quantum/q_fourier_transform.py#L45-L81","documentation":"Raised by quantum_fourier_transform() in quantum/q_fourier_transform.py when number_of_qubits is numeric but not a whole number (math.floor(x) != x). QuantumRegister sizes must be exact integers; the library chose to accept integral-numeric types (e.g. 4.0 passes) but reject fractional values like 0.5 that would otherwise fail deep inside Qiskit with an opaque error.","triggerScenarios":"quantum_fourier_transform(0.5), quantum_fourier_transform(7.3), quantum_fourier_transform(2**0.5). Note quantum_fourier_transform(4.0) passes because floor(4.0) == 4.0.","commonSituations":"Register sizes derived from division (n / 2), logarithms (math.log2(n)), or scaling factors; float arithmetic that should have been integer; ML pipeline hyperparameters sampled as floats.","solutions":["Pass whole numbers: quantum_fourier_transform(4).","Round derived sizes explicitly: quantum_fourier_transform(round(n / 2)) or use integer floor division //.","Validate with .is_integer() when the value must be float-sourced: if not nq.is_integer(): raise."],"exampleFix":"# before\nnq = num_states / 2  # float like 5.5 or 5.0\nquantum_fourier_transform(nq)\n\n# after\nnq = num_states // 2  # exact int\nquantum_fourier_transform(nq)","handlingStrategy":"validation","validationCode":"nq = round(nq)  # or: num_states // 2\nif isinstance(nq, float) and not nq.is_integer():\n    raise ValueError(f\"qubit count must be whole, got {nq}\")\nquantum_fourier_transform(nq)","typeGuard":"def is_whole_number(value) -> bool:\n    return isinstance(value, (int, float)) and float(value).is_integer() and value > 0","tryCatchPattern":"try:\n    qc = quantum_fourier_transform(nq)\nexcept ValueError as e:\n    if \"exact integer\" in str(e):\n        qc = quantum_fourier_transform(round(nq))\n    else:\n        raise","preventionTips":["Use // (floor division) instead of / when deriving qubit counts.","Round log/sqrt-derived sizes explicitly before calling.","Integral floats (4.0) are accepted; fractional ones are not — check .is_integer()."],"tags":["quantum","validation","valueerror","integer-check"],"backgroundTag":null,"analyzedSha":"f5988cc09713315817df6a7e327e258013a94440","analyzedAt":"2026-08-14T17:30:07.041Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}