def discard(self, val):
        """
        Remove the first occurrence of *val*.

        If *val* is not a member, does nothing.
        """
        _maxes = self._maxes

        if not _maxes:
            return

        key = self._key(val)
        pos = bisect_left(_maxes, key)

        if pos == len(_maxes):
            return

        _keys = self._keys
        _lists = self._lists
        idx = bisect_left(_keys[pos], key)

        len_keys = len(_keys)
        len_sublist = len(_keys[pos])

        while True:
            if _keys[pos][idx] != key:
                return
            if _lists[pos][idx] == val:
                self._delete(pos, idx)
                return
            idx += 1
            if idx == len_sublist:
                pos += 1
                if pos == len_keys:
                    return
                len_sublist = len(_keys[pos])
                idx = 0
def discard ( self , val ) : _maxes = self . _maxes if not _maxes : return key = self . _key ( val ) pos = bisect_left ( _maxes , key ) if pos == len ( _maxes ) : return _keys = self . _keys _lists = self . _lists idx = bisect_left ( _keys [ pos ] , key ) len_keys = len ( _keys ) len_sublist = len ( _keys [ pos ] ) while True : if _keys [ pos ] [ idx ] != key : return if _lists [ pos ] [ idx ] == val : self . _delete ( pos , idx ) return idx += 1 if idx == len_sublist : pos += 1 if pos == len_keys : return len_sublist = len ( _keys [ pos ] ) idx = 0
Remove the first occurrence of *val*.

        If *val* is not a member, does nothing.