'Checks state `state` to see if the breakpoint should fire.
:param state:   The state.
:param when:    Whether the check is happening before or after the event.
:return:        A boolean representing whether the checkpoint should fire.'

def check(self, state, when):

    ok = (self.enabled and ((when == self.when) or (self.when == BP_BOTH)))
    if (not ok):
        return ok
    l.debug('...    after    enabled    and    when:    %s', ok)
    for a in [_ for _ in self.kwargs.keys() if (not _.endswith('_unique'))]:
        current_expr = getattr(state.inspect, a)
        needed = self.kwargs.get(a, None)
        l.debug('...    checking    condition    %s', a)
        if ((current_expr is None) and (needed is None)):
            l.debug('......    both    None,    True')
            c_ok = True
        elif ((current_expr is not None) and (needed is not None)):
            if state.se.solution(current_expr, needed):
                l.debug('......    is_solution!')
                c_ok = True
            else:
                l.debug('......    not    solution...')
                c_ok = False
            if (c_ok and self.kwargs.get((a + '_unique'), True)):
                l.debug('......    checking    uniqueness')
                if (not state.se.unique(current_expr)):
                    l.debug('......    not    unique')
                    c_ok = False
        else:
            l.debug('......    one    None,    False')
            c_ok = False
        ok = (ok and c_ok)
        if (not ok):
            return ok
        l.debug('...    after    condition    %s:    %s', a, ok)
    ok = (ok and ((self.condition is None) or self.condition(state)))
    l.debug('...    after    condition    func:    %s', ok)
    return ok
