(self, xval: XValue[T], yval: float, squash: bool = True)
Add a breakpoint to the function and update the value

        Let f(x) be the original function, and next_bp be the first breakpoint > xval; after calling
        this method, the function will be modified to f'(x) = yval for x \in [xval, next_bp)

        :param xval: the x-position of the breakpoint to add/modify
        :param yval: the value to set the function to at xval
        :param squash: if True and f(xval) = yval before calling this method, the function will remain unchanged
Add a breakpoint to the function and update the value
Add a breakpoint to the function and update the value
def add_breakpoint(self, xval: XValue[T], yval: float, squash: bool = True) -> None:
        """ Add a breakpoint to the function and update the value

        Let f(x) be the original function, and next_bp be the first breakpoint > xval; after calling
        this method, the function will be modified to f'(x) = yval for x \in [xval, next_bp)

        :param xval: the x-position of the breakpoint to add/modify
        :param yval: the value to set the function to at xval
        :param squash: if True and f(xval) = yval before calling this method, the function will remain unchanged
        """
        if squash and self.call(xval) == yval:
            return
        self.breakpoints[xval] = yval
def add_breakpoint ( self , xval : XValue [ T ] , yval : float , squash : bool = True ) -> None : if squash and self . call ( xval ) == yval : return self . breakpoints [ xval ] = yval