def edge_label(s, edge, alpha=<NUM_LIT:1.0>):
if s.text and edge.label != "<STR_LIT>":<EOL><INDENT>s._ctx.nostroke()<EOL>s._ctx.fill(<EOL>s.text.r,<EOL>s.text.g,<EOL>s.text.b,<EOL>s.text.a * alpha*<NUM_LIT><EOL>)<EOL>s._ctx.lineheight(<NUM_LIT:1>)<EOL>s._ctx.font(s.font)<EOL>s._ctx.fontsize(s.fontsize*<NUM_LIT>)<EOL>try:<EOL><INDENT>p = edge._textpath<EOL><DEDENT>except:<EOL><INDENT>try:<EOL><INDENT>txt = str(edge.label)<EOL><DEDENT>except:<EOL><INDENT>try:<EOL><INDENT>txt = edge.label.decode("<STR_LIT:utf-8>")<EOL><DEDENT>except:<EOL><INDENT>pass<EOL><DEDENT><DEDENT>edge._textpath = s._ctx.textpath(<EOL>txt, s._ctx.textwidth("<STR_LIT:U+0020>"), <NUM_LIT:0>, width=s.textwidth)<EOL>p = edge._textpath<EOL><DEDENT>a = degrees(atan2(edge.node2.y-edge.node1.y,<EOL>edge.node2.x-edge.node1.x))<EOL>d = sqrt((edge.node2.x-edge.node1.x)**<NUM_LIT:2> +<EOL>(edge.node2.y-edge.node1.y)**<NUM_LIT:2>)<EOL>d = abs(d-s._ctx.textwidth(edge.label)) * <NUM_LIT:0.5><EOL>s._ctx.push()<EOL>s._ctx.transform(CORNER)<EOL>s._ctx.translate(edge.node1.x, edge.node1.y)<EOL>s._ctx.rotate(-a)<EOL>s._ctx.translate(d, s.fontsize*<NUM_LIT:1.0>)<EOL>s._ctx.scale(alpha)<EOL>if <NUM_LIT> < a % <NUM_LIT> < <NUM_LIT>:<EOL><INDENT>s._ctx.translate(s._ctx.textwidth(edge.label), -s.fontsize*<NUM_LIT>)<EOL>s._ctx.transform(CENTER)<EOL>s._ctx.rotate(<NUM_LIT>)<EOL>s._ctx.transform(CORNER)<EOL><DEDENT>s._ctx.drawpath(p.copy())<EOL>s._ctx.pop()<EOL><DEDENT>
Visualization of the label accompanying an edge.