{"record":{"id":"aed3a34888721f39","repo":"TheAlgorithms/Python","slug":"number-of-qubits-must-be-0","errorCode":null,"errorMessage":"number of qubits must be > 0.","messagePattern":"number of qubits must be > 0\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"quantum/q_fourier_transform.py","lineNumber":61,"sourceCode":"        ...\n    ValueError: number of qubits must be > 0.\n    >>> 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","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/TheAlgorithms/Python/blob/f5988cc09713315817df6a7e327e258013a94440/quantum/q_fourier_transform.py#L43-L79","documentation":"Raised by quantum_fourier_transform() in quantum/q_fourier_transform.py when number_of_qubits <= 0. A QFT circuit needs at least one qubit; zero or negative counts make QuantumRegister construction invalid and the Hadamard/control loop (which iterates range(counter)) meaningless, so the guard rejects them with ValueError.","triggerScenarios":"quantum_fourier_transform(0), quantum_fourier_transform(-2), quantum_fourier_transform(-0.5). Note a float like 0.5 passes this check but fails the next one (exact-integer check).","commonSituations":"Computed register sizes that hit 0 (e.g. num_qubits = total - reserved with reserved >= total); user form input defaulting to 0; parameter sweeps starting at 0.","solutions":["Pass a positive integer count (1..10 for simulatable sizes).","Validate at the source: if nq <= 0: reject in the UI/config layer.","Clamp computed sizes: nq = max(1, total - reserved) if a zero count is a bug."],"exampleFix":"# before\nnq = data_qubits - ancilla  # can be 0\nquantum_fourier_transform(nq)\n\n# after\nif nq <= 0:\n    raise ValueError(f\"need at least 1 qubit, got {nq}\")\nquantum_fourier_transform(nq)","handlingStrategy":"validation","validationCode":"if not isinstance(number_of_qubits, (int, float)) or number_of_qubits <= 0:\n    raise ValueError(f\"number_of_qubits must be positive, got {number_of_qubits!r}\")\nquantum_fourier_transform(number_of_qubits)","typeGuard":"def is_positive_qubit_count(value) -> bool:\n    return isinstance(value, (int, float)) and value > 0","tryCatchPattern":"try:\n    qc = quantum_fourier_transform(nq)\nexcept ValueError as e:\n    if \"must be > 0\" in str(e):\n        raise ConfigError(\"qubit count must be at least 1\") from e\n    raise","preventionTips":["Guard computed register sizes (total - reserved) against collapsing to 0.","Set min=1 in UI/config schemas for qubit count.","Remember the simulatable cap is 10; values 1-10 are the practical range."],"tags":["quantum","validation","valueerror","input-validation"],"backgroundTag":null,"analyzedSha":"f5988cc09713315817df6a7e327e258013a94440","analyzedAt":"2026-08-14T17:30:07.041Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}