TheAlgorithms/Python · error · ValueError
Impossible gravity
Error message
Impossible gravity
What it means
Raised by archimedes_principle when gravity is negative. Unlike density and volume, gravity of exactly 0 is allowed (free-fall / orbit, returns 0.0) — only strictly negative values raise, since negative gravitational acceleration is unphysical in this model. It is the last of the three ordered checks.
Source
Thrown at physics/archimedes_principle_of_buoyant_force.py:54
ValueError: Impossible object volume
>>> archimedes_principle(fluid_density=0, volume=0.7)
Traceback (most recent call last):
...
ValueError: Impossible fluid density
>>> archimedes_principle(fluid_density=997, volume=0.7, gravity=0)
0.0
>>> archimedes_principle(fluid_density=997, volume=0.7, gravity=-9.8)
Traceback (most recent call last):
...
ValueError: Impossible gravity
"""
if fluid_density <= 0:
raise ValueError("Impossible fluid density")
if volume <= 0:
raise ValueError("Impossible object volume")
if gravity < 0:
raise ValueError("Impossible gravity")
return fluid_density * gravity * volume
if __name__ == "__main__":
import doctest
doctest.testmod()
View on GitHub (pinned to f5988cc097)
Solutions
- Pass the magnitude of gravitational acceleration (e.g. 9.8 or 9.81 m/s^2), not a signed vector component
- Use gravity=0 deliberately for free-fall/orbital scenarios — it is supported
- If your coordinate convention encodes gravity as -9.8, convert with abs()
Example fix
# before archimedes_principle(fluid_density=997, volume=0.7, gravity=g_vec.y) # -9.8 -> ValueError # after archimedes_principle(fluid_density=997, volume=0.7, gravity=abs(g_vec.y))
Defensive patterns
Strategy: validation
Validate before calling
def valid_gravity(gravity) -> bool:
return gravity >= 0 # 0 is allowed (free fall); only negative raises Prevention
- Pass gravity magnitudes (9.81), not signed vector components from physics engines
- Convert axis-aligned gravity like g_vec.y = -9.8 with abs()
When it happens
Trigger: Calling archimedes_principle(gravity=-9.8, ...), e.g. by sign-flipping an acceleration value or using a downward-positive coordinate convention.
Common situations: Physics engines or coordinate systems where the gravity vector is expressed as negative-y, and the signed component is passed instead of its magnitude.
Related errors
- Impossible fluid density
- Impossible object volume
- One and only one argument must be 0
- You cannot supply more or less than 2 values
- Expected a_coeffs to have {self.order + 1} elements for {sel
AI-assisted analysis of TheAlgorithms/Python@f5988cc097 (2026-08-14).
Data as JSON: /api/errors/32620fd3e24624d4.
Report an issue: GitHub.