/** * Compute the total call-graph facts, the total size of the call-graph relation and * the ratio of the two in relation to the depth of context. */ import python import semmle.python.pointsto.PointsTo import semmle.python.pointsto.PointsToContext from int total_facts, int total_size, int depth, float efficiency where total_facts = strictcount(ControlFlowNode call, CallableValue func | exists(PointsToContext ctx | call = func.getACall(ctx) and depth = ctx.getDepth() ) ) and total_size = strictcount(ControlFlowNode call, CallableValue func, PointsToContext ctx | call = func.getACall(ctx) and depth = ctx.getDepth() ) and efficiency = 100.0 * total_facts / total_size select depth, total_facts, total_size, efficiency