def _derive_turning_point(self, config):
if not self._roast.get('<STR_LIT>') or self._roast.get('<STR_LIT>'):<EOL><INDENT>return None<EOL><DEDENT>if self._roast['<STR_LIT>']['<STR_LIT>'] == config['<STR_LIT>']:<EOL><INDENT>return None<EOL><DEDENT>self._window.append(config)<EOL>time, temp = list(), list()<EOL>for x in list(self._window):<EOL><INDENT>time.append(x['<STR_LIT:time>'])<EOL>temp.append(x['<STR_LIT>'])<EOL><DEDENT>slope, intercept, r_value, p_value, std_err = linregress(time, temp)<EOL>if slope > <NUM_LIT:0>:<EOL><INDENT>self._roast['<STR_LIT>'] = self._roast['<STR_LIT>']<EOL>self.add_roast_event({'<STR_LIT>': '<STR_LIT>'})<EOL>return config<EOL><DEDENT>return None<EOL>
Use a temperature window to identify the roast turning point.

        Turning point relies on the charge being set first. We use the rolling
        5-point window to measure slope. If we show a positive trend after
        the charge, then the temperature has begun to turn.

        :param config: Current snapshot of the configuration
        :type config: dict
        :returns: None