[docs]classStickBallCollisionStrategy(_BaseStrategy,Protocol):"""Stick-ball collision models must satisfy this protocol"""
[docs]defsolve(self,cue:Cue,ball:Ball)->Tuple[Cue,Ball]:"""This method resolves a ball-circular cushion collision"""...
classCoreStickBallCollision(ABC):"""Operations used by every stick-ball collision resolver"""defresolve(self,cue:Cue,ball:Ball,inplace:bool=False)->Tuple[Cue,Ball]:ifnotinplace:cue=cue.copy()ball=ball.copy()returnself.solve(cue,ball)@abstractmethoddefsolve(self,cue:Cue,ball:Ball)->Tuple[Cue,Ball]:pass