<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def add_condition(self, conkey, cond):
 """Add a condition, one of the addable ones. conkey: str One of 'cond', startcond' or 'stopcond'. 'start' or 'stop' is accepted as shorts for 'startcond' or 'stopcond'. If the conkey is given with an explicit number (like 'stopcond3') and already exist, it will be over-written, else created. When the trailing number is implicit, the first condition with a value of None is taken. If no None value is found, a new condition is added. cond: str .. note:: Updates the mask if not no_auto. .. seealso:: :meth:`~channelpack.ChannelPack.set_duration` :meth:`~channelpack.ChannelPack.set_samplerate` :meth:`~channelpack.ChannelPack.set_stopextend` :meth:`~channelpack.ChannelPack.clear_conditions` """


        # Audit:
        if conkey == 'start' or conkey == 'stop':
            conkey += 'cond'
        if not any(conkey.startswith(addable) for addable in _ADDABLES):
            raise KeyError(conkey)
        if not self.conconf.valid_conkey(conkey):
            raise KeyError(conkey)

        self._parse_cond(cond)  # Checking

        conkey = self.conconf.next_conkey(conkey)
        self.conconf.set_condition(conkey, cond)

        if not self.no_auto:
            self.make_mask()