[docs]classBallLCushionModel(StrEnum):"""An Enum for different ball-linear cushion collision models Attributes: HAN_2005: https://ekiefl.github.io/2020/04/24/pooltool-theory/#3-han-2005 (:class:`Han2005Linear`). UNREALISTIC: An unrealistic model in which balls are perfectly reflected. Spin is left untouched by the interaction (:class:`UnrealisticLinear`). """HAN_2005=auto()UNREALISTIC=auto()
[docs]classBallCCushionModel(StrEnum):"""An Enum for different ball-circular cushion collision models Attributes: HAN_2005: https://ekiefl.github.io/2020/04/24/pooltool-theory/#3-han-2005 (:class:`Han2005Linear`). UNREALISTIC: An unrealistic model in which balls are perfectly reflected. Spin is left untouched by the interaction (:class:`UnrealisticCircular`). """HAN_2005=auto()UNREALISTIC=auto()
[docs]defget_ball_lin_cushion_model(model:Optional[BallLCushionModel]=None,params:ModelArgs={})->BallLCushionCollisionStrategy:"""Returns a ball-linear cushion collision model Args: model: An Enum specifying the desired model. If not passed, :class:`Han2005Linear` is passed with empty params. params: A mapping of parameters accepted by the model. Returns: An instantiated model that satisfies the :class:`BallLCushionCollisionStrategy` protocol. """ifmodelisNone:returnHan2005Linear()return_ball_lcushion_models[model](**params)
[docs]defget_ball_circ_cushion_model(model:Optional[BallCCushionModel]=None,params:ModelArgs={})->BallCCushionCollisionStrategy:"""Returns a ball-circular cushion collision model Args: model: An Enum specifying the desired model. If not passed, :class:`Han2005Circular` is passed with empty params. params: A mapping of parameters accepted by the model. Returns: An instantiated model that satisfies the :class:`BallCCushionCollisionStrategy` protocol. """ifmodelisNone:returnHan2005Circular()return_ball_ccushion_models[model](**params)