Source code for osaft.core.geometries

from osaft import log
from osaft.core.functions import pi
from osaft.core.variable import ActiveVariable, PassiveVariable


[docs]class Sphere: """Sphere class :param radius: radius in [m] """ def __init__(self, radius: float) -> None: """Constructor method""" # Independent variables self._R_0 = PassiveVariable(radius, "radius R_0") # Dependent variables self._A = ActiveVariable( self._compute_surface_area, "surface area A", ) self._V = ActiveVariable( self._compute_volume, "volume V", ) # Dependencies self._A.is_computed_by(self._R_0) self._V.is_computed_by(self._R_0) log.debug(f"Creating {self}") def __repr__(self) -> str: return f"Sphere(R={self.R_0})" # ------------------------------------------------------------------------- # Setters and Getters for Independent Variables # ------------------------------------------------------------------------- @property def R_0(self) -> float: """Radius of the sphere [m] :getter: returns the value for the radius :setter: automatically invokes :meth:`osaft.core.variable.BaseVariable.notify` """ return self._R_0.value @R_0.setter def R_0(self, value: float) -> None: self._R_0.value = value # ------------------------------------------------------------------------- # Getters for Dependent Variables # ------------------------------------------------------------------------- @property def area(self) -> float: """Returns the surface area of the sphere [m^2]""" return self._A.value @property def volume(self) -> float: """Returns the volume of the sphere [m^3]""" return self._V.value # ------------------------------------------------------------------------- # Methods for Dependent Variables Methods # ------------------------------------------------------------------------- def _compute_surface_area(self) -> float: return 4 * pi * self.R_0**2 def _compute_volume(self) -> float: return 4 / 3 * pi * self.R_0**3
if __name__ == "__main__": pass