pooltool.physics ================ .. py:module:: pooltool.physics Physics subpackage for pooltool ------------------------------- Subpackages ----------- .. toctree:: :titlesonly: :maxdepth: 1 evolve/index.rst resolve/index.rst Submodules ---------- .. toctree:: :titlesonly: :maxdepth: 1 engine/index.rst Overview -------- .. list-table:: Classes :header-rows: 0 :widths: auto :class: summarytable * - :py:obj:`PhysicsEngine ` - A billiards engine for pluggable physics. * - :py:obj:`BallBallCollisionStrategy ` - Ball-ball collision models must satisfy this protocol * - :py:obj:`BallBallModel ` - An Enum for different ball-ball collision models * - :py:obj:`BallCCushionCollisionStrategy ` - Ball-circular cushion collision models must satisfy this protocol * - :py:obj:`BallCCushionModel ` - An Enum for different ball-circular cushion collision models * - :py:obj:`BallLCushionCollisionStrategy ` - Ball-linear cushion collision models must satisfy this protocol * - :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:`BallPocketStrategy ` - Ball-pocket collision models must satisfy this protocol * - :py:obj:`Resolver ` - A physics engine component that characterizes event resolution * - :py:obj:`StickBallCollisionStrategy ` - Stick-ball collision models must satisfy this protocol * - :py:obj:`StickBallModel ` - An Enum for different stick-ball collision models * - :py:obj:`BallTransitionModel ` - An Enum for different transition models * - :py:obj:`BallTransitionStrategy ` - Ball transition models must satisfy this protocol .. list-table:: Attributes :header-rows: 0 :widths: auto :class: summarytable * - :py:obj:`RESOLVER_PATH ` - The location of the resolver path YAML. Classes ------- .. autoclass:: PhysicsEngine .. autoclass:: BallBallCollisionStrategy Bases: :py:obj:`_BaseStrategy`, :py:obj:`Protocol` .. rubric:: Methods: .. py:method:: solve(ball1: pooltool.objects.ball.datatypes.Ball, ball2: pooltool.objects.ball.datatypes.Ball) -> Tuple[pooltool.objects.ball.datatypes.Ball, pooltool.objects.ball.datatypes.Ball] This method resolves a ball-ball collision .. autoclass:: BallBallModel Bases: :py:obj:`pooltool.utils.strenum.StrEnum` .. autoclass:: BallCCushionCollisionStrategy Bases: :py:obj:`_BaseCircularStrategy`, :py:obj:`Protocol` .. rubric:: Methods: .. py:method:: solve(ball: pooltool.objects.ball.datatypes.Ball, cushion: pooltool.objects.table.components.CircularCushionSegment) -> Tuple[pooltool.objects.ball.datatypes.Ball, pooltool.objects.table.components.CircularCushionSegment] This method resolves a ball-circular cushion collision .. autoclass:: BallCCushionModel Bases: :py:obj:`pooltool.utils.strenum.StrEnum` .. autoclass:: BallLCushionCollisionStrategy Bases: :py:obj:`_BaseLinearStrategy`, :py:obj:`Protocol` .. rubric:: Methods: .. py:method:: solve(ball: pooltool.objects.ball.datatypes.Ball, cushion: pooltool.objects.table.components.LinearCushionSegment) -> Tuple[pooltool.objects.ball.datatypes.Ball, pooltool.objects.table.components.LinearCushionSegment] This method resolves a ball-circular cushion collision .. autoclass:: BallLCushionModel Bases: :py:obj:`pooltool.utils.strenum.StrEnum` .. autoclass:: BallPocketModel Bases: :py:obj:`pooltool.utils.strenum.StrEnum` .. autoclass:: BallPocketStrategy Bases: :py:obj:`Protocol` .. rubric:: Methods: .. py:method:: resolve(ball: pooltool.objects.ball.datatypes.Ball, pocket: pooltool.objects.table.components.Pocket, inplace: bool = False) -> Tuple[pooltool.objects.ball.datatypes.Ball, pooltool.objects.table.components.Pocket] This method resolves a ball-circular cushion collision .. 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:: default() -> Resolver :classmethod: Load ~/.config/pooltool/physics/resolver.yaml if exists, create otherwise .. autoclass:: StickBallCollisionStrategy Bases: :py:obj:`_BaseStrategy`, :py:obj:`Protocol` .. rubric:: Methods: .. py:method:: solve(cue: pooltool.objects.cue.datatypes.Cue, ball: pooltool.objects.ball.datatypes.Ball) -> Tuple[pooltool.objects.cue.datatypes.Cue, pooltool.objects.ball.datatypes.Ball] This method resolves a ball-circular cushion collision .. autoclass:: StickBallModel Bases: :py:obj:`pooltool.utils.strenum.StrEnum` .. autoclass:: BallTransitionModel Bases: :py:obj:`pooltool.utils.strenum.StrEnum` .. autoclass:: BallTransitionStrategy Bases: :py:obj:`Protocol` .. rubric:: Methods: .. py:method:: resolve(ball: pooltool.objects.ball.datatypes.Ball, transition: pooltool.events.datatypes.EventType, inplace: bool = False) -> pooltool.objects.ball.datatypes.Ball This method resolves a ball transition Attributes ---------- .. py:data:: RESOLVER_PATH The location of the resolver path YAML.