TheAlgorithms/Python · error · ValueError

Relative densities cannot be greater than one

Error message

Relative densities cannot be greater than one

What it means

Raised by hubble_parameter() when radiation_density, matter_density, or dark_energy exceeds 1. These are relative (dimensionless) densities expressed as fractions of the critical density, so any value above 1 is rejected; their sum may still exceed or fall below 1, which the code interprets as curvature via curvature = 1 - sum.

Source

Thrown at physics/hubble_parameter.py:77

    ...
    ValueError: All input parameters must be positive

    >>> hubble_parameter(hubble_constant=68.3, radiation_density=1e-4,
    ... matter_density= 1.2, dark_energy=0.7, redshift=1)
    Traceback (most recent call last):
    ...
    ValueError: Relative densities cannot be greater than one

    >>> hubble_parameter(hubble_constant=68.3, radiation_density=1e-4,
    ... matter_density= 0.3, dark_energy=0.7, redshift=0)
    68.3
    """
    parameters = [redshift, radiation_density, matter_density, dark_energy]
    if any(p < 0 for p in parameters):
        raise ValueError("All input parameters must be positive")

    if any(p > 1 for p in parameters[1:4]):
        raise ValueError("Relative densities cannot be greater than one")
    else:
        curvature = 1 - (matter_density + radiation_density + dark_energy)

        e_2 = (
            radiation_density * (redshift + 1) ** 4
            + matter_density * (redshift + 1) ** 3
            + curvature * (redshift + 1) ** 2
            + dark_energy
        )

        hubble = hubble_constant * e_2 ** (1 / 2)
        return hubble


if __name__ == "__main__":
    import doctest

    # run doctest

View on GitHub (pinned to f5988cc097)

Solutions

  1. Convert densities to fractions of the critical density (divide by rho_crit) so each is in [0, 1].
  2. If you passed percentages, divide by 100: dark_energy=70 -> 0.7.
  3. Add a pre-call assertion all(0 <= p <= 1 for p in (radiation_density, matter_density, dark_energy)).

Example fix

# before
hubble_parameter(68.3, 1e-4, 1.2, 0.7, 1)  # ValueError

# after
hubble_parameter(68.3, 1e-4, 0.3, 0.7, 1)  # fractions of critical density
Defensive patterns

Strategy: validation

Validate before calling

assert all(0.0 <= p <= 1.0 for p in (radiation_density, matter_density, dark_energy)), \
    'relative densities must be fractions of the critical density in [0, 1]'
hubble_parameter(hubble_constant, radiation_density, matter_density, dark_energy, redshift)

Prevention

When it happens

Trigger: hubble_parameter(68.3, 1e-4, matter_density=1.2, dark_energy=0.7, redshift=1) — matter_density > 1 triggers it. The check applies only to parameters[1:4]; hubble_constant and redshift are not range-checked.

Common situations: Mixing up absolute densities with relative (Omega) densities; entering percentages (e.g. 70 instead of 0.7); datasets using Omega_m ~ 0.3 but Omega_L stored as 70.

Related errors


AI-assisted analysis of TheAlgorithms/Python@f5988cc097 (2026-08-14). Data as JSON: /api/errors/b27ff66318f16919. Report an issue: GitHub.