{"record":{"id":"6b22267cba1575f6","repo":"TheAlgorithms/Python","slug":"intrinsic-concentration-cannot-be-negative-in-a-se","errorCode":null,"errorMessage":"Intrinsic concentration cannot be negative in a semiconductor","messagePattern":"Intrinsic concentration cannot be negative in a semiconductor","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"electronics/carrier_concentration.py","lineNumber":50,"sourceCode":"        ...\n    ValueError: Electron concentration cannot be negative in a semiconductor\n    >>> carrier_concentration(electron_conc=0, hole_conc=-400, intrinsic_conc=1200)\n    Traceback (most recent call last):\n        ...\n    ValueError: Hole concentration cannot be negative in a semiconductor\n    >>> carrier_concentration(electron_conc=0, hole_conc=400, intrinsic_conc=-1200)\n    Traceback (most recent call last):\n        ...\n    ValueError: Intrinsic concentration cannot be negative in a semiconductor\n    \"\"\"\n    if (electron_conc, hole_conc, intrinsic_conc).count(0) != 1:\n        raise ValueError(\"You cannot supply more or less than 2 values\")\n    elif electron_conc < 0:\n        raise ValueError(\"Electron concentration cannot be negative in a semiconductor\")\n    elif hole_conc < 0:\n        raise ValueError(\"Hole concentration cannot be negative in a semiconductor\")\n    elif intrinsic_conc < 0:\n        raise ValueError(\n            \"Intrinsic concentration cannot be negative in a semiconductor\"\n        )\n    elif electron_conc == 0:\n        return (\n            \"electron_conc\",\n            intrinsic_conc**2 / hole_conc,\n        )\n    elif hole_conc == 0:\n        return (\n            \"hole_conc\",\n            intrinsic_conc**2 / electron_conc,\n        )\n    elif intrinsic_conc == 0:\n        return (\n            \"intrinsic_conc\",\n            (electron_conc * hole_conc) ** 0.5,\n        )\n    else:","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/TheAlgorithms/Python/blob/f5988cc09713315817df6a7e327e258013a94440/electronics/carrier_concentration.py#L32-L68","documentation":"Thrown by carrier_concentration() when intrinsic_conc < 0 while exactly one argument is 0. The intrinsic (thermal equilibrium) carrier concentration ni is a positive material property (e.g. ~1e10 cm^-3 for silicon at 300 K); a negative value is non-physical and is rejected before ni^2 is used.","triggerScenarios":"carrier_concentration(electron_conc=0, hole_conc=400, intrinsic_conc=-1200) — exactly one zero but negative intrinsic concentration.","commonSituations":"Temperature-dependent ni lookups returning negative garbage on out-of-range temperatures; tabulated data with missing values encoded as negatives; manual entry typos.","solutions":["Supply a positive intrinsic concentration (use ni ≈ 1e10 cm^-3 for Si at 300 K if unsure).","If ni comes from a temperature model, validate the temperature range before computing it.","Treat negative ni as invalid input data and fail early in your own pipeline."],"exampleFix":"# before\ncarrier_concentration(electron_conc=0, hole_conc=400, intrinsic_conc=-1200)\n\n# after\ncarrier_concentration(electron_conc=0, hole_conc=400, intrinsic_conc=1200)","handlingStrategy":"validation","validationCode":"if intrinsic_conc <= 0:\n    raise ValueError(\"intrinsic_conc must be positive (Si@300K ~ 1e10 cm^-3)\")\nresult = carrier_concentration(electron_conc, hole_conc, intrinsic_conc)","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate ni against the temperature range of its source model.","Keep a table of positive ni values per material instead of computing ad hoc."],"tags":["electronics","semiconductor","physics","validation","sign-error"],"backgroundTag":null,"analyzedSha":"f5988cc09713315817df6a7e327e258013a94440","analyzedAt":"2026-08-14T17:30:07.041Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}