pooltool.physics¶
Physics subpackage for pooltool¶
Subpackages¶
Submodules¶
Overview¶
A billiards engine for pluggable physics. |
|
Ball-ball collision models must satisfy this protocol |
|
An Enum for different ball-ball collision models |
|
Ball-circular cushion collision models must satisfy this protocol |
|
An Enum for different ball-circular cushion collision models |
|
Ball-linear cushion collision models must satisfy this protocol |
|
An Enum for different ball-linear cushion collision models |
|
An Enum for different ball-pocket collision models |
|
Ball-pocket collision models must satisfy this protocol |
|
A physics engine component that characterizes event resolution |
|
A structured form of the user resolver config |
|
Stick-ball collision models must satisfy this protocol |
|
An Enum for different stick-ball collision models |
|
An Enum for different transition models |
|
Ball transition models must satisfy this protocol |
|
Returns a ball-ball collision model |
|
Returns a ball-circular cushion collision model |
|
Returns a ball-linear cushion collision model |
|
Returns a ball-pocket collision model |
|
Returns a stick-ball collision model |
|
Returns a transition model |
The location of the resolver config path YAML |
|
Allowable types model arguments |
|
A mapping of argument names to argument values |
Classes¶
- class pooltool.physics.PhysicsEngine(resolver: Resolver = Resolver.default)[source]¶
A billiards engine for pluggable physics.
Important
Currently, only event resolution is a part of this class. The sliding, rolling, and spinning ball trajectory evolution is currently “hard-coded”, however can in theory be added to this class to enable alternative trajectory models.
- resolver¶
The physics engine responsible for resolving events.
- class pooltool.physics.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.BallBallModel(value)[source]¶
An Enum for different ball-ball collision models
- FRICTIONLESS_ELASTIC¶
Frictionless, instantaneous, elastic, equal mass collision (
FrictionlessElastic
).
- class pooltool.physics.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
- class pooltool.physics.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
).
- class pooltool.physics.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
- class pooltool.physics.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
).
- class pooltool.physics.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
).
- class pooltool.physics.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.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.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:
- class pooltool.physics.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.StickBallModel(value)[source]¶
An Enum for different stick-ball collision models
- INSTANTANEOUS_POINT¶
Instantaneous and point-like stick-ball interaction (
InstantaneousPoint
).
- class pooltool.physics.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
).
- class pooltool.physics.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:
Functions¶
- pooltool.physics.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:
- pooltool.physics.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:
- pooltool.physics.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:
- pooltool.physics.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:
- pooltool.physics.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:
- pooltool.physics.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:
Attributes¶
- pooltool.physics.RESOLVER_CONFIG_PATH¶
The location of the resolver config path YAML
- pooltool.physics.ArgType¶
Allowable types model arguments
- pooltool.physics.ModelArgs¶
A mapping of argument names to argument values