Example #1
0
def makeChildren((dad, mom)):
    sampler = utils.getattrdefault(makeChildren, 'sampler',
                                                    lambda: utils.Sampler(range(len(num_children_distribution)),
                                                                    num_children_distribution.__getitem__))
    numchildren = sampler.sample()
    children = [Node(dad, mom) for spam in xrange(numchildren)]
    if hasattr(dad, 'generation') and hasattr(mom, 'generation')\
                                                    and dad.generation == mom.generation:
        generation = dad.generation + 1
    else:
        generation = None
    for child in children:
        dad.children.add(child)
        mom.children.add(child)
        if generation is not None:
            child.generation = generation
    return children
Example #2
0
def convolvedDensity(relation_or_distseq):
    cache = utils.getattrdefault(convolvedDensity, 'cache', dict)
    if hasattr(relation_or_distseq, "items"):
        distseq =       relation_or_distseq.iteritems() |\
                                Map(lambda ((h1, h2), val): (h1 + h2 for spam in xrange(val))) |\
                                pFlatten | pSort | Sink(tuple)
        if distseq in cache:
            return cache[distseq]
        subseqs = [tuple([d for d in distseq if d == i]) for i in set(distseq)]
    else:
        distseq = relation_or_distseq
        assert len(set(distseq)) == 1
        if distseq in cache:
            return cache[distseq]
        if len(distseq) == 1:
            return pdfvectors[distseq[0]]
        subseqs = [distseq[:len(distseq) / 2], distseq[len(distseq) / 2:]]
    vectors = map(convolvedDensity, subseqs)
    if distseq not in cache:
        sys.stderr.write('cache miss ' + str(distseq) + '\n')
        cache[distseq] = convolveSequence(vectors)
    return cache[distseq]
Example #3
0
def convolvedDensity(relation_or_distseq):
    cache = utils.getattrdefault(convolvedDensity, 'cache', dict)
    if hasattr(relation_or_distseq, "items"):
        distseq =       relation_or_distseq.iteritems() |\
                                Map(lambda ((h1, h2), val): (h1 + h2 for spam in xrange(val))) |\
                                pFlatten | pSort | Sink(tuple)
        if distseq in cache:
            return cache[distseq]
        subseqs = [tuple([d for d in distseq if d == i]) for i in set(distseq)]
    else:
        distseq = relation_or_distseq
        assert len(set(distseq)) == 1
        if distseq in cache:
            return cache[distseq]
        if len(distseq) == 1:
            return pdfvectors[distseq[0]]
        subseqs = [distseq[:len(distseq)/2], distseq[len(distseq)/2:]]
    vectors = map(convolvedDensity, subseqs)
    if distseq not in cache:
        sys.stderr.write('cache miss ' + str(distseq) + '\n')
        cache[distseq] = convolveSequence(vectors)
    return cache[distseq]