Functional coverage tree: Difference between revisions

m
m (→‎Python: Composition of pure functions: (str.isspace() in lieu of `re`))
Line 1,606:
# TWO COMPUTATIONS BY TRAVERSAL
withResidueShares(1.0)(
foldTree(weightedTreeAverageweightedCoverage)(
 
# TREE FROM PARSE OF OUTLINE TEXT
Line 1,624:
# WEIGHTED COVERAGE, AND SHARE OF TOTAL RESIDUE -----------
 
# weightedCoverage :: Tree Dict -> Float
def weightedCoverage(node):
'''The weighted coverage of a
node in a coverage tree.
'''
nodeRoot = root(node)
return nodeRoot['coverage'] * nodeRoot['weight']
 
 
# weightedTreeAverage :: Tree Dict ->
# [Tree Dict] -> Tree Dict
def weightedTreeAverageweightedCoverage(x):
'''The weighted averagecoverage of a tree node,
as a function of the weighted averages
of its children.
'''
def go(xs):
cws = [(r['coverage'], r['weight']) for r in [root(x) for x in xs]]
totalWeight = reduce(lambda a, x: a + x[1], cws, 0)
return Node(dict(
x, **{
'coverage': round(x['coverage'] + reduce(
reducelambda a, cw: a + (cw[0] * cw[1]),
lambda acws, node: weightedCoverage(node) + a,x['coverage']
) / (totalWeight if 0 < totalWeight else xs1), 05)
) / (
reduce(
lambda a, node: root(node)['weight'] + a,
xs, 0
) or 1
)
), 5)
}
))(xs)
9,655

edits