pooltool.physics ================ .. py:module:: pooltool.physics Physics subpackage for pooltool ------------------------------- Overview -------- .. list-table:: Classes :header-rows: 0 :widths: auto :class: summarytable * - :py:obj:`PhysicsEngine ` - A billiards engine for pluggable physics. * - :py:obj:`BallBallModel ` - An Enum for different ball-ball collision models * - :py:obj:`BallBallFrictionModel ` - An Enum for different ball-ball friction models * - :py:obj:`BallCCushionModel ` - An Enum for different ball-circular cushion collision models * - :py:obj:`BallLCushionModel ` - An Enum for different ball-linear cushion collision models * - :py:obj:`BallPocketModel ` - An Enum for different ball-pocket collision models * - :py:obj:`Resolver ` - A physics engine component that characterizes event resolution * - :py:obj:`StickBallModel ` - An Enum for different stick-ball collision models * - :py:obj:`BallTransitionModel ` - An Enum for different transition models .. list-table:: Function :header-rows: 0 :widths: auto :class: summarytable * - :py:obj:`evolve_ball_motion `\ (state, rvw, R, m, u_s, u_sp, u_r, g, t) - \- * - :py:obj:`evolve_perpendicular_spin_component `\ (wz, R, u_sp, g, t) - \- * - :py:obj:`evolve_perpendicular_spin_state `\ (rvw, R, u_sp, g, t) - \- * - :py:obj:`evolve_roll_state `\ (rvw, R, u_r, u_sp, g, t) - \- * - :py:obj:`evolve_slide_state `\ (rvw, R, m, u_s, u_sp, g, t) - \- * - :py:obj:`display_models `\ () - \- .. list-table:: Attributes :header-rows: 0 :widths: auto :class: summarytable * - :py:obj:`ball_ball_models ` - \- * - :py:obj:`ball_ball_friction_models ` - \- * - :py:obj:`ball_ccushion_models ` - \- * - :py:obj:`ball_lcushion_models ` - \- * - :py:obj:`ball_pocket_models ` - \- * - :py:obj:`RESOLVER_PATH ` - The location of the resolver path YAML. * - :py:obj:`stick_ball_models ` - \- * - :py:obj:`ball_transition_models ` - \- Classes ------- .. autoclass:: PhysicsEngine .. autoclass:: BallBallModel Bases: :py:obj:`pooltool.utils.strenum.StrEnum` .. autoclass:: BallBallFrictionModel Bases: :py:obj:`pooltool.utils.strenum.StrEnum` .. autoclass:: BallCCushionModel Bases: :py:obj:`pooltool.utils.strenum.StrEnum` .. autoclass:: BallLCushionModel Bases: :py:obj:`pooltool.utils.strenum.StrEnum` .. autoclass:: BallPocketModel Bases: :py:obj:`pooltool.utils.strenum.StrEnum` .. autoclass:: Resolver .. rubric:: Methods: .. py:method:: resolve(shot: pooltool.system.datatypes.System, event: pooltool.events.datatypes.Event) -> None Resolve an event for a system .. py:method:: save(path: pooltool.serialize.Pathish) -> pathlib.Path .. py:method:: load(path: pooltool.serialize.Pathish) -> Resolver :classmethod: .. py:method:: default() -> Resolver :classmethod: Load ~/.config/pooltool/physics/resolver.yaml if exists, create otherwise .. autoclass:: StickBallModel Bases: :py:obj:`pooltool.utils.strenum.StrEnum` .. autoclass:: BallTransitionModel Bases: :py:obj:`pooltool.utils.strenum.StrEnum` Functions --------- .. py:function:: evolve_ball_motion(state: int, rvw: numpy.typing.NDArray[numpy.float64], R: float, m: float, u_s: float, u_sp: float, u_r: float, g: float, t: float) -> tuple[numpy.typing.NDArray[numpy.float64], int] .. py:function:: evolve_perpendicular_spin_component(wz: float, R: float, u_sp: float, g: float, t: float) -> float .. py:function:: evolve_perpendicular_spin_state(rvw: numpy.typing.NDArray[numpy.float64], R: float, u_sp: float, g: float, t: float) -> numpy.typing.NDArray[numpy.float64] .. py:function:: evolve_roll_state(rvw: numpy.typing.NDArray[numpy.float64], R: float, u_r: float, u_sp: float, g: float, t: float) -> numpy.typing.NDArray[numpy.float64] .. py:function:: evolve_slide_state(rvw: numpy.typing.NDArray[numpy.float64], R: float, m: float, u_s: float, u_sp: float, g: float, t: float) -> numpy.typing.NDArray[numpy.float64] .. py:function:: display_models() Attributes ---------- .. py:data:: ball_ball_models :type: dict[pooltool.physics.resolve.models.BallBallModel, type[core.BallBallCollisionStrategy]] .. py:data:: ball_ball_friction_models :type: dict[BallBallFrictionModel, type[BallBallFrictionStrategy]] .. py:data:: ball_ccushion_models :type: dict[pooltool.physics.resolve.models.BallCCushionModel, type[core.BallCCushionCollisionStrategy]] .. py:data:: ball_lcushion_models :type: dict[pooltool.physics.resolve.models.BallLCushionModel, type[core.BallLCushionCollisionStrategy]] .. py:data:: ball_pocket_models :type: dict[pooltool.physics.resolve.models.BallPocketModel, type[BallPocketStrategy]] .. py:data:: RESOLVER_PATH The location of the resolver path YAML. .. py:data:: stick_ball_models :type: dict[pooltool.physics.resolve.models.StickBallModel, type[core.StickBallCollisionStrategy]] .. py:data:: ball_transition_models :type: dict[pooltool.physics.resolve.models.BallTransitionModel, type[BallTransitionStrategy]]