def or_d(x, y): out = defaultdict(lambdaMinusInfinity) out[True] = logplusexp( x.get(True, -Infinity) + y.get(False, -Infinity), x.get(False, -Infinity) + y.get(True, -Infinity)) out[False] = log1mexp(out[True]) return out
def not_d(x): out = defaultdict(lambdaMinusInfinity) out[True] = x.get(False, -Infinity) out[False] = log1mexp(out[True]) return out
def and_d(x, y): out = defaultdict(lambdaMinusInfinity) out[True] = x.get(True, -Infinity) + y.get(True, -Infinity) out[False] = log1mexp(out[True]) return out
def equal_d(x, y): peq = -Infinity for a, v in list(x.items()): peq = logplusexp(peq, v + y.get(a, -Infinity)) # P(x=a,y=a) return {True: peq, False: log1mexp(peq)}
def empty_d(x): p = x.get('', -Infinity) return {True: p, False: log1mexp(p)}
def __init__(self, gamma=-30, **kwargs): RecursiveLOTHypothesis.__init__(self, grammar, **kwargs) self.gamma = gamma self.lg1mgamma = log1mexp(gamma)