{"record":{"id":"8f169ad2d39ac10b","repo":"TheAlgorithms/Python","slug":"please-ensure-that-density-diameter-and-viscosity","errorCode":null,"errorMessage":"please ensure that density, diameter and viscosity are positive","messagePattern":"please ensure that density, diameter and viscosity are positive","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"physics/reynolds_number.py","lineNumber":54,"sourceCode":"    \"\"\"\n    >>> reynolds_number(900, 2.5, 0.05, 0.4)\n    281.25\n    >>> reynolds_number(450, 3.86, 0.078, 0.23)\n    589.0695652173912\n    >>> reynolds_number(234, -4.5, 0.3, 0.44)\n    717.9545454545454\n    >>> reynolds_number(-90, 2, 0.045, 1)\n    Traceback (most recent call last):\n        ...\n    ValueError: please ensure that density, diameter and viscosity are positive\n    >>> reynolds_number(0, 2, -0.4, -2)\n    Traceback (most recent call last):\n        ...\n    ValueError: please ensure that density, diameter and viscosity are positive\n    \"\"\"\n\n    if density <= 0 or diameter <= 0 or viscosity <= 0:\n        raise ValueError(\n            \"please ensure that density, diameter and viscosity are positive\"\n        )\n    return (density * abs(velocity) * diameter) / viscosity\n\n\nif __name__ == \"__main__\":\n    import doctest\n\n    doctest.testmod()\n","sourceCodeStart":36,"sourceCodeEnd":64,"githubUrl":"https://github.com/TheAlgorithms/Python/blob/f5988cc09713315817df6a7e327e258013a94440/physics/reynolds_number.py#L36-L64","documentation":"Raised by reynolds_number(density, velocity, diameter, viscosity) in physics/reynolds_number.py when density <= 0, diameter <= 0, or viscosity <= 0. Re = density*|velocity|*diameter/viscosity needs positive fluid properties and pipe diameter; velocity may be negative (abs() is applied) but the other three must be strictly positive.","triggerScenarios":"reynolds_number(-90, 2, 0.045, 1) — negative density, as in the doctest; reynolds_number(0, 2, -0.4, -2) — zero density with negative diameter and viscosity; any call with diameter=0 (a collapsed/zero-size duct) or viscosity=0 (division by zero avoided).","commonSituations":"Unit mistakes such as diameter given as 0 (unitless) or in the wrong scale; viscosity entered as 0 for 'frictionless' idealization; property tables returning 0 outside their valid temperature range; sign conventions where density is stored signed after a pressure delta.","solutions":["Supply positive SI values: density in kg/m^3 (e.g. 1000 for water), diameter in m (e.g. 0.045), viscosity in Pa*s (e.g. 0.001)","Guard fluid-property lookups so they never return 0/undefined outside the fitted range","If velocity sign varies, keep it — the function applies abs() — but check the other three with a pre-call assertion"],"exampleFix":"# before\nreynolds_number(-90, 2, 0.045, 1)\n# ValueError: please ensure that density, diameter and viscosity are positive\n\n# after\nassert 0 < 0.045 and 0 < 1 and 0 < 1000\nreynolds_number(1000, 2, 0.045, 1)","handlingStrategy":"validation","validationCode":"if density <= 0 or diameter <= 0 or viscosity <= 0:\n    raise ValueError(f\"need positive density/diameter/viscosity, got {density}/{diameter}/{viscosity}\")\nreynolds_number(density, velocity, diameter, viscosity)  # velocity may be negative","typeGuard":null,"tryCatchPattern":"try:\n    re = reynolds_number(density, velocity, diameter, viscosity)\nexcept ValueError as e:\n    if \"positive\" in str(e):\n        raise ValueError(\"check SI units: kg/m^3, m, Pa*s\") from e\n    raise","preventionTips":["Velocity sign is fine (abs() applied); only density, diameter, viscosity must be > 0","Guard fluid-property lookups against returning 0 outside valid ranges"],"tags":["physics","fluid-dynamics","validation","valueerror"],"backgroundTag":null,"analyzedSha":"f5988cc09713315817df6a7e327e258013a94440","analyzedAt":"2026-08-14T17:30:07.041Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}