pooltool.physics.resolve

Resolve events

Subpackages

Submodules

Overview

Classes

BallBallCollisionStrategy

Ball-ball collision models must satisfy this protocol

BallBallModel

An Enum for different ball-ball collision models

BallCCushionCollisionStrategy

Ball-circular cushion collision models must satisfy this protocol

BallCCushionModel

An Enum for different ball-circular cushion collision models

BallLCushionCollisionStrategy

Ball-linear cushion collision models must satisfy this protocol

BallLCushionModel

An Enum for different ball-linear cushion collision models

BallPocketModel

An Enum for different ball-pocket collision models

BallPocketStrategy

Ball-pocket collision models must satisfy this protocol

Resolver

A physics engine component that characterizes event resolution

ResolverConfig

A structured form of the user resolver config

StickBallCollisionStrategy

Stick-ball collision models must satisfy this protocol

StickBallModel

An Enum for different stick-ball collision models

BallTransitionModel

An Enum for different transition models

BallTransitionStrategy

Ball transition models must satisfy this protocol

Function

get_ball_ball_model(model, params)

Returns a ball-ball collision model

get_ball_circ_cushion_model(model, params)

Returns a ball-circular cushion collision model

get_ball_lin_cushion_model(model, params)

Returns a ball-linear cushion collision model

get_ball_pocket_model(model, params)

Returns a ball-pocket collision model

get_stick_ball_model(model, params)

Returns a stick-ball collision model

get_transition_model(model, params)

Returns a transition model

Attributes

RESOLVER_CONFIG_PATH

The location of the resolver config path YAML

Classes

class pooltool.physics.resolve.BallBallCollisionStrategy(*args, **kwargs)[source]

Ball-ball collision models must satisfy this protocol

Bases: _BaseStrategy, Protocol

Methods:

solve(ball1: pooltool.objects.ball.datatypes.Ball, ball2: pooltool.objects.ball.datatypes.Ball) Tuple[pooltool.objects.ball.datatypes.Ball, pooltool.objects.ball.datatypes.Ball][source]

This method resolves a ball-ball collision

Return type:

Tuple[pooltool.objects.ball.datatypes.Ball, pooltool.objects.ball.datatypes.Ball]

class pooltool.physics.resolve.BallBallModel(value)[source]

An Enum for different ball-ball collision models

FRICTIONLESS_ELASTIC

Frictionless, instantaneous, elastic, equal mass collision (FrictionlessElastic).

Bases: pooltool.utils.strenum.StrEnum

class pooltool.physics.resolve.BallCCushionCollisionStrategy(*args, **kwargs)[source]

Ball-circular cushion collision models must satisfy this protocol

Bases: _BaseCircularStrategy, Protocol

Methods:

solve(ball: pooltool.objects.ball.datatypes.Ball, cushion: pooltool.objects.table.components.CircularCushionSegment) Tuple[pooltool.objects.ball.datatypes.Ball, pooltool.objects.table.components.CircularCushionSegment][source]

This method resolves a ball-circular cushion collision

Return type:

Tuple[pooltool.objects.ball.datatypes.Ball, pooltool.objects.table.components.CircularCushionSegment]

class pooltool.physics.resolve.BallCCushionModel(value)[source]

An Enum for different ball-circular cushion collision models

HAN_2005

https://ekiefl.github.io/2020/04/24/pooltool-theory/#3-han-2005 (Han2005Linear).

UNREALISTIC

An unrealistic model in which balls are perfectly reflected. Spin is left untouched by the interaction (UnrealisticCircular).

Bases: pooltool.utils.strenum.StrEnum

class pooltool.physics.resolve.BallLCushionCollisionStrategy(*args, **kwargs)[source]

Ball-linear cushion collision models must satisfy this protocol

Bases: _BaseLinearStrategy, Protocol

Methods:

solve(ball: pooltool.objects.ball.datatypes.Ball, cushion: pooltool.objects.table.components.LinearCushionSegment) Tuple[pooltool.objects.ball.datatypes.Ball, pooltool.objects.table.components.LinearCushionSegment][source]

This method resolves a ball-circular cushion collision

Return type:

Tuple[pooltool.objects.ball.datatypes.Ball, pooltool.objects.table.components.LinearCushionSegment]

class pooltool.physics.resolve.BallLCushionModel(value)[source]

An Enum for different ball-linear cushion collision models

HAN_2005

https://ekiefl.github.io/2020/04/24/pooltool-theory/#3-han-2005 (Han2005Linear).

UNREALISTIC

An unrealistic model in which balls are perfectly reflected. Spin is left untouched by the interaction (UnrealisticLinear).

Bases: pooltool.utils.strenum.StrEnum

class pooltool.physics.resolve.BallPocketModel(value)[source]

An Enum for different ball-pocket collision models

CANONICAL

Sets the ball into the bottom of pocket and sets the state to pocketed (CanonicalBallPocket).

Bases: pooltool.utils.strenum.StrEnum

class pooltool.physics.resolve.BallPocketStrategy(*args, **kwargs)[source]

Ball-pocket collision models must satisfy this protocol

Bases: Protocol

Methods:

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][source]

This method resolves a ball-circular cushion collision

Return type:

Tuple[pooltool.objects.ball.datatypes.Ball, pooltool.objects.table.components.Pocket]

class pooltool.physics.resolve.Resolver(ball_ball: BallBallCollisionStrategy, ball_linear_cushion: BallLCushionCollisionStrategy, ball_circular_cushion: BallCCushionCollisionStrategy, ball_pocket: BallPocketStrategy, stick_ball: StickBallCollisionStrategy, transition: BallTransitionStrategy)[source]

A physics engine component that characterizes event resolution

Important

For everything you need to know about this class, see :doc:`Modular Physics </resources/custom_physics>`_.

Methods:

resolve(shot: pooltool.system.datatypes.System, event: pooltool.events.datatypes.Event) None[source]

Resolve an event for a system

class pooltool.physics.resolve.ResolverConfig(ball_ball: BallBallModel, ball_ball_params: Mapping[str, float | int | str | bool], ball_linear_cushion: BallLCushionModel, ball_linear_cushion_params: Mapping[str, float | int | str | bool], ball_circular_cushion: BallCCushionModel, ball_circular_cushion_params: Mapping[str, float | int | str | bool], ball_pocket: BallPocketModel, ball_pocket_params: Mapping[str, float | int | str | bool], stick_ball: StickBallModel, stick_ball_params: Mapping[str, float | int | str | bool], transition: BallTransitionModel, transition_params: Mapping[str, float | int | str | bool])[source]

A structured form of the user resolver config

Important

For everything you need to know about this class, see :doc:`Modular Physics </resources/custom_physics>`_.

Methods:

classmethod default() ResolverConfig[source]

Load ~/.config/pooltool/physics/resolver.yaml if exists, create otherwise

Return type:

ResolverConfig

class pooltool.physics.resolve.StickBallCollisionStrategy(*args, **kwargs)[source]

Stick-ball collision models must satisfy this protocol

Bases: _BaseStrategy, Protocol

Methods:

solve(cue: pooltool.objects.cue.datatypes.Cue, ball: pooltool.objects.ball.datatypes.Ball) Tuple[pooltool.objects.cue.datatypes.Cue, pooltool.objects.ball.datatypes.Ball][source]

This method resolves a ball-circular cushion collision

Return type:

Tuple[pooltool.objects.cue.datatypes.Cue, pooltool.objects.ball.datatypes.Ball]

class pooltool.physics.resolve.StickBallModel(value)[source]

An Enum for different stick-ball collision models

INSTANTANEOUS_POINT

Instantaneous and point-like stick-ball interaction (InstantaneousPoint).

Bases: pooltool.utils.strenum.StrEnum

class pooltool.physics.resolve.BallTransitionModel(value)[source]

An Enum for different transition models

CANONICAL

Sets the ball to appropriate state. Sets any residual quantities to 0 when appropriate (CanonicalTransition).

Bases: pooltool.utils.strenum.StrEnum

class pooltool.physics.resolve.BallTransitionStrategy(*args, **kwargs)[source]

Ball transition models must satisfy this protocol

Bases: Protocol

Methods:

resolve(ball: pooltool.objects.ball.datatypes.Ball, transition: pooltool.events.datatypes.EventType, inplace: bool = False) pooltool.objects.ball.datatypes.Ball[source]

This method resolves a ball transition

Return type:

pooltool.objects.ball.datatypes.Ball

Functions

pooltool.physics.resolve.get_ball_ball_model(model: BallBallModel | None = None, params: pooltool.physics.resolve.types.ModelArgs = {}) core.BallBallCollisionStrategy[source]

Returns a ball-ball collision model

Parameters:
  • model (Optional[BallBallModel]) -- An Enum specifying the desired model. If not passed, FrictionlessElastic is passed with empty params.

  • params (pooltool.physics.resolve.types.ModelArgs) -- A mapping of parameters accepted by the model.

Returns:

An instantiated model that satisfies the BallBallCollisionStrategy protocol.

Return type:

core.BallBallCollisionStrategy

pooltool.physics.resolve.get_ball_circ_cushion_model(model: BallCCushionModel | None = None, params: pooltool.physics.resolve.types.ModelArgs = {}) core.BallCCushionCollisionStrategy[source]

Returns a ball-circular cushion collision model

Parameters:
  • model (Optional[BallCCushionModel]) -- An Enum specifying the desired model. If not passed, Han2005Circular is passed with empty params.

  • params (pooltool.physics.resolve.types.ModelArgs) -- A mapping of parameters accepted by the model.

Returns:

An instantiated model that satisfies the BallCCushionCollisionStrategy protocol.

Return type:

core.BallCCushionCollisionStrategy

pooltool.physics.resolve.get_ball_lin_cushion_model(model: BallLCushionModel | None = None, params: pooltool.physics.resolve.types.ModelArgs = {}) core.BallLCushionCollisionStrategy[source]

Returns a ball-linear cushion collision model

Parameters:
  • model (Optional[BallLCushionModel]) -- An Enum specifying the desired model. If not passed, Han2005Linear is passed with empty params.

  • params (pooltool.physics.resolve.types.ModelArgs) -- A mapping of parameters accepted by the model.

Returns:

An instantiated model that satisfies the BallLCushionCollisionStrategy protocol.

Return type:

core.BallLCushionCollisionStrategy

pooltool.physics.resolve.get_ball_pocket_model(model: BallPocketModel | None = None, params: pooltool.physics.resolve.types.ModelArgs = {}) BallPocketStrategy[source]

Returns a ball-pocket collision model

Parameters:
  • model (Optional[BallPocketModel]) -- An Enum specifying the desired model. If not passed, CanonicalBallPocket is passed with empty params.

  • params (pooltool.physics.resolve.types.ModelArgs) -- A mapping of parameters accepted by the model.

Returns:

An instantiated model that satisfies the BallPocketStrategy protocol.

Return type:

BallPocketStrategy

pooltool.physics.resolve.get_stick_ball_model(model: StickBallModel | None = None, params: pooltool.physics.resolve.types.ModelArgs = {}) core.StickBallCollisionStrategy[source]

Returns a stick-ball collision model

Parameters:
  • model (Optional[StickBallModel]) -- An Enum specifying the desired model. If not passed, InstantaneousPoint is passed with empty params.

  • params (pooltool.physics.resolve.types.ModelArgs) -- A mapping of parameters accepted by the model.

Returns:

An instantiated model that satisfies the StickBallCollisionStrategy protocol.

Return type:

core.StickBallCollisionStrategy

pooltool.physics.resolve.get_transition_model(model: BallTransitionModel | None = None, params: pooltool.physics.resolve.types.ModelArgs = {}) BallTransitionStrategy[source]

Returns a transition model

Parameters:
  • model (Optional[BallTransitionModel]) -- An Enum specifying the desired model. If not passed, CanonicalTransition is passed with empty params.

  • params (pooltool.physics.resolve.types.ModelArgs) -- A mapping of parameters accepted by the model.

Returns:

An instantiated model that satisfies the BallTransitionStrategy protocol.

Return type:

BallTransitionStrategy

Attributes

pooltool.physics.resolve.RESOLVER_CONFIG_PATH

The location of the resolver config path YAML