'Internal sample method
Returns dictionary mapping RandomSymbol to realization value.'

def sample(self):

    expr = Tuple(*self.values)
    cdf = self.sorted_cdf(expr, python_float=True)
    x = random.uniform(0, 1)
    for (value, cum_prob) in cdf:
        if (x < cum_prob):
            return dict(list(zip(expr, value)))
    assert False, 'We    should    never    have    gotten    to    this    point'
