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