{"record":{"id":"6705ca18cdc67724","repo":"TheAlgorithms/Python","slug":"all-elements-in-candidates-must-be-non-negative","errorCode":null,"errorMessage":"All elements in candidates must be non-negative","messagePattern":"All elements in candidates must be non-negative","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"backtracking/combination_sum.py","lineNumber":60,"sourceCode":"    \"\"\"\n    >>> combination_sum([2, 3, 5], 8)\n    [[2, 2, 2, 2], [2, 3, 3], [3, 5]]\n    >>> combination_sum([2, 3, 6, 7], 7)\n    [[2, 2, 3], [7]]\n    >>> combination_sum([-8, 2.3, 0], 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: All elements in candidates must be non-negative\n    >>> combination_sum([], 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: Candidates list should not be empty\n    \"\"\"\n    if not candidates:\n        raise ValueError(\"Candidates list should not be empty\")\n\n    if any(x < 0 for x in candidates):\n        raise ValueError(\"All elements in candidates must be non-negative\")\n\n    path = []  # type: list[int]\n    answer = []  # type: list[int]\n    backtrack(candidates, path, answer, target, 0)\n    return answer\n\n\ndef main() -> None:\n    print(combination_sum([-8, 2.3, 0], 1))\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n    main()\n","sourceCodeStart":42,"sourceCodeEnd":77,"githubUrl":"https://github.com/TheAlgorithms/Python/blob/f5988cc09713315817df6a7e327e258013a94440/backtracking/combination_sum.py#L42-L77","documentation":"Raised by casimir_force() in physics/casimir_effect.py when the force argument is negative (and exactly one argument was 0). The Casimir force magnitude in this formula is treated as a non-negative quantity; a negative magnitude is rejected. Note force is checked first, so a negative force raises even if area or distance is also negative.","triggerScenarios":"casimir_force(force=-912e-12, area=0, distance=0.09374); passing a signed force measurement where the sign convention was 'attractive = negative' into a magnitude-based API.","commonSituations":"Physics datasets often encode the attractive Casimir force as negative; feeding such measurements directly into this magnitude-based solver without taking abs() triggers the error.","solutions":["Pass the magnitude: use abs(force) if the sign only encodes attraction direction.","Check force >= 0 before the call if the value is user-supplied.","Wrap in try/except ValueError to surface a clear message for bad imports."],"exampleFix":"# before\ncasimir_force(force=measured_force, area=0, distance=d)  # -912e-12\n\n# after\ncasimir_force(force=abs(measured_force), area=0, distance=d)","handlingStrategy":"validation","validationCode":"if force is not None and force < 0:\n    force = abs(force)  # magnitude API; sign encodes attraction elsewhere\ncasimir_force(force=force, area=a, distance=d)","typeGuard":null,"tryCatchPattern":"try:\n    casimir_force(force=f, area=0, distance=d)\nexcept ValueError as e:\n    if \"force\" in str(e):\n        casimir_force(force=abs(f), area=0, distance=d)\n    else:\n        raise","preventionTips":["Convert signed measurements to magnitudes at ingest.","Note force is checked before distance/area, so it masks co-occurring negative inputs.","Keep attraction-direction metadata in a separate column, not the sign of force."],"tags":["physics","input-validation","sign-convention"],"backgroundTag":null,"analyzedSha":"f5988cc09713315817df6a7e327e258013a94440","analyzedAt":"2026-08-14T17:30:07.041Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}