Skip to content

Instantly share code, notes, and snippets.

@eregon
Created August 10, 2018 18:10
Show Gist options
  • Save eregon/52ae9bc79deabb3e8f6116702a6f9e9f to your computer and use it in GitHub Desktop.
Save eregon/52ae9bc79deabb3e8f6116702a6f9e9f to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" width="1200" height="534" onload="init(evt)" viewBox="0 0 1200 534" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Flame graph stack visualization. See https://github.com/brendangregg/FlameGraph for latest version, and http://www.brendangregg.com/flamegraphs.html for examples. -->
<!-- NOTES: -->
<defs >
<linearGradient id="background" y1="0" y2="1" x1="0" x2="0" >
<stop stop-color="#eeeeee" offset="5%" />
<stop stop-color="#eeeeb0" offset="95%" />
</linearGradient>
</defs>
<style type="text/css">
.func_g:hover { stroke:black; stroke-width:0.5; cursor:pointer; }
</style>
<script type="text/ecmascript">
<![CDATA[
var details, searchbtn, matchedtxt, svg;
function init(evt) {
details = document.getElementById("details").firstChild;
searchbtn = document.getElementById("search");
matchedtxt = document.getElementById("matched");
svg = document.getElementsByTagName("svg")[0];
searching = 0;
}
// mouse-over for info
function s(node) { // show
info = g_to_text(node);
details.nodeValue = "Function: " + info;
}
function c() { // clear
details.nodeValue = ' ';
}
// ctrl-F for search
window.addEventListener("keydown",function (e) {
if (e.keyCode === 114 || (e.ctrlKey && e.keyCode === 70)) {
e.preventDefault();
search_prompt();
}
})
// functions
function find_child(parent, name, attr) {
var children = parent.childNodes;
for (var i=0; i<children.length;i++) {
if (children[i].tagName == name)
return (attr != undefined) ? children[i].attributes[attr].value : children[i];
}
return;
}
function orig_save(e, attr, val) {
if (e.attributes["_orig_"+attr] != undefined) return;
if (e.attributes[attr] == undefined) return;
if (val == undefined) val = e.attributes[attr].value;
e.setAttribute("_orig_"+attr, val);
}
function orig_load(e, attr) {
if (e.attributes["_orig_"+attr] == undefined) return;
e.attributes[attr].value = e.attributes["_orig_"+attr].value;
e.removeAttribute("_orig_"+attr);
}
function g_to_text(e) {
var text = find_child(e, "title").firstChild.nodeValue;
return (text)
}
function g_to_func(e) {
var func = g_to_text(e);
// if there's any manipulation we want to do to the function
// name before it's searched, do it here before returning.
return (func);
}
function update_text(e) {
var r = find_child(e, "rect");
var t = find_child(e, "text");
var w = parseFloat(r.attributes["width"].value) -3;
var txt = find_child(e, "title").textContent.replace(/\([^(]*\)$/,"");
t.attributes["x"].value = parseFloat(r.attributes["x"].value) +3;
// Smaller than this size won't fit anything
if (w < 2*12*0.59) {
t.textContent = "";
return;
}
t.textContent = txt;
// Fit in full text width
if (/^ *$/.test(txt) || t.getSubStringLength(0, txt.length) < w)
return;
for (var x=txt.length-2; x>0; x--) {
if (t.getSubStringLength(0, x+2) <= w) {
t.textContent = txt.substring(0,x) + "..";
return;
}
}
t.textContent = "";
}
// zoom
function zoom_reset(e) {
if (e.attributes != undefined) {
orig_load(e, "x");
orig_load(e, "width");
}
if (e.childNodes == undefined) return;
for(var i=0, c=e.childNodes; i<c.length; i++) {
zoom_reset(c[i]);
}
}
function zoom_child(e, x, ratio) {
if (e.attributes != undefined) {
if (e.attributes["x"] != undefined) {
orig_save(e, "x");
e.attributes["x"].value = (parseFloat(e.attributes["x"].value) - x - 10) * ratio + 10;
if(e.tagName == "text") e.attributes["x"].value = find_child(e.parentNode, "rect", "x") + 3;
}
if (e.attributes["width"] != undefined) {
orig_save(e, "width");
e.attributes["width"].value = parseFloat(e.attributes["width"].value) * ratio;
}
}
if (e.childNodes == undefined) return;
for(var i=0, c=e.childNodes; i<c.length; i++) {
zoom_child(c[i], x-10, ratio);
}
}
function zoom_parent(e) {
if (e.attributes) {
if (e.attributes["x"] != undefined) {
orig_save(e, "x");
e.attributes["x"].value = 10;
}
if (e.attributes["width"] != undefined) {
orig_save(e, "width");
e.attributes["width"].value = parseInt(svg.width.baseVal.value) - (10*2);
}
}
if (e.childNodes == undefined) return;
for(var i=0, c=e.childNodes; i<c.length; i++) {
zoom_parent(c[i]);
}
}
function zoom(node) {
var attr = find_child(node, "rect").attributes;
var width = parseFloat(attr["width"].value);
var xmin = parseFloat(attr["x"].value);
var xmax = parseFloat(xmin + width);
var ymin = parseFloat(attr["y"].value);
var ratio = (svg.width.baseVal.value - 2*10) / width;
// XXX: Workaround for JavaScript float issues (fix me)
var fudge = 0.0001;
var unzoombtn = document.getElementById("unzoom");
unzoombtn.style["opacity"] = "1.0";
var el = document.getElementsByTagName("g");
for(var i=0;i<el.length;i++){
var e = el[i];
var a = find_child(e, "rect").attributes;
var ex = parseFloat(a["x"].value);
var ew = parseFloat(a["width"].value);
// Is it an ancestor
if (0 == 0) {
var upstack = parseFloat(a["y"].value) > ymin;
} else {
var upstack = parseFloat(a["y"].value) < ymin;
}
if (upstack) {
// Direct ancestor
if (ex <= xmin && (ex+ew+fudge) >= xmax) {
e.style["opacity"] = "0.5";
zoom_parent(e);
e.onclick = function(e){unzoom(); zoom(this);};
update_text(e);
}
// not in current path
else
e.style["display"] = "none";
}
// Children maybe
else {
// no common path
if (ex < xmin || ex + fudge >= xmax) {
e.style["display"] = "none";
}
else {
zoom_child(e, xmin, ratio);
e.onclick = function(e){zoom(this);};
update_text(e);
}
}
}
}
function unzoom() {
var unzoombtn = document.getElementById("unzoom");
unzoombtn.style["opacity"] = "0.0";
var el = document.getElementsByTagName("g");
for(i=0;i<el.length;i++) {
el[i].style["display"] = "block";
el[i].style["opacity"] = "1";
zoom_reset(el[i]);
update_text(el[i]);
}
}
// search
function reset_search() {
var el = document.getElementsByTagName("rect");
for (var i=0; i < el.length; i++) {
orig_load(el[i], "fill")
}
}
function search_prompt() {
if (!searching) {
var term = prompt("Enter a search term (regexp " +
"allowed, eg: ^ext4_)", "");
if (term != null) {
search(term)
}
} else {
reset_search();
searching = 0;
searchbtn.style["opacity"] = "0.1";
searchbtn.firstChild.nodeValue = "Search"
matchedtxt.style["opacity"] = "0.0";
matchedtxt.firstChild.nodeValue = ""
}
}
function search(term) {
var re = new RegExp(term);
var el = document.getElementsByTagName("g");
var matches = new Object();
var maxwidth = 0;
for (var i = 0; i < el.length; i++) {
var e = el[i];
if (e.attributes["class"].value != "func_g")
continue;
var func = g_to_func(e);
var rect = find_child(e, "rect");
if (rect == null) {
// the rect might be wrapped in an anchor
// if nameattr href is being used
if (rect = find_child(e, "a")) {
rect = find_child(r, "rect");
}
}
if (func == null || rect == null)
continue;
// Save max width. Only works as we have a root frame
var w = parseFloat(rect.attributes["width"].value);
if (w > maxwidth)
maxwidth = w;
if (func.match(re)) {
// highlight
var x = parseFloat(rect.attributes["x"].value);
orig_save(rect, "fill");
rect.attributes["fill"].value =
"rgb(230,0,230)";
// remember matches
if (matches[x] == undefined) {
matches[x] = w;
} else {
if (w > matches[x]) {
// overwrite with parent
matches[x] = w;
}
}
searching = 1;
}
}
if (!searching)
return;
searchbtn.style["opacity"] = "1.0";
searchbtn.firstChild.nodeValue = "Reset Search"
// calculate percent matched, excluding vertical overlap
var count = 0;
var lastx = -1;
var lastw = 0;
var keys = Array();
for (k in matches) {
if (matches.hasOwnProperty(k))
keys.push(k);
}
// sort the matched frames by their x location
// ascending, then width descending
keys.sort(function(a, b){
return a - b;
});
// Step through frames saving only the biggest bottom-up frames
// thanks to the sort order. This relies on the tree property
// where children are always smaller than their parents.
var fudge = 0.0001; // JavaScript floating point
for (var k in keys) {
var x = parseFloat(keys[k]);
var w = matches[keys[k]];
if (x >= lastx + lastw - fudge) {
count += w;
lastx = x;
lastw = w;
}
}
// display matched percent
matchedtxt.style["opacity"] = "1.0";
pct = 100 * count / maxwidth;
if (pct == 100)
pct = "100"
else
pct = pct.toFixed(1)
matchedtxt.firstChild.nodeValue = "Matched: " + pct + "%";
}
function searchover(e) {
searchbtn.style["opacity"] = "1.0";
}
function searchout(e) {
if (searching) {
searchbtn.style["opacity"] = "1.0";
} else {
searchbtn.style["opacity"] = "0.1";
}
}
]]>
</script>
<rect x="0.0" y="0" width="1200.0" height="534.0" fill="url(#background)" />
<text text-anchor="middle" x="600.00" y="24" font-size="17" font-family="Verdana" fill="rgb(0,0,0)" >Flame Chart</text>
<text text-anchor="" x="10.00" y="517" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="details" > </text>
<text text-anchor="" x="10.00" y="24" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="unzoom" onclick="unzoom()" style="opacity:0.0;cursor:pointer" >Reset Zoom</text>
<text text-anchor="" x="1090.00" y="24" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="search" onmouseover="searchover()" onmouseout="searchout()" onclick="search_prompt()" style="opacity:0.1;cursor:pointer" >Search</text>
<text text-anchor="" x="1090.00" y="517" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" id="matched" > </text>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._get_candidates_map (3 samples, 0.22%)</title><rect x="347.1" y="405" width="2.7" height="15.0" fill="rgb(238,181,4)" rx="2" ry="2" />
<text text-anchor="" x="350.14" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (1 samples, 0.07%)</title><rect x="521.9" y="37" width="0.8" height="15.0" fill="rgb(249,50,14)" rx="2" ry="2" />
<text text-anchor="" x="524.86" y="47.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (3 samples, 0.22%)</title><rect x="646.5" y="293" width="2.7" height="15.0" fill="rgb(207,9,44)" rx="2" ry="2" />
<text text-anchor="" x="649.53" y="303.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._get_candidates_map (11 samples, 0.82%)</title><rect x="317.3" y="421" width="9.6" height="15.0" fill="rgb(251,159,27)" rx="2" ry="2" />
<text text-anchor="" x="320.29" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (3 samples, 0.22%)</title><rect x="493.8" y="245" width="2.6" height="15.0" fill="rgb(210,43,28)" rx="2" ry="2" />
<text text-anchor="" x="496.76" y="255.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (5 samples, 0.37%)</title><rect x="478.8" y="309" width="4.4" height="15.0" fill="rgb(206,42,45)" rx="2" ry="2" />
<text text-anchor="" x="481.84" y="319.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (21 samples, 1.56%)</title><rect x="512.2" y="293" width="18.4" height="15.0" fill="rgb(227,173,43)" rx="2" ry="2" />
<text text-anchor="" x="515.20" y="303.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (2 samples, 0.15%)</title><rect x="492.0" y="261" width="1.8" height="15.0" fill="rgb(236,123,19)" rx="2" ry="2" />
<text text-anchor="" x="495.01" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (3 samples, 0.22%)</title><rect x="636.0" y="341" width="2.6" height="15.0" fill="rgb(216,226,44)" rx="2" ry="2" />
<text text-anchor="" x="639.00" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._get_candidates_map (24 samples, 1.79%)</title><rect x="280.4" y="437" width="21.1" height="15.0" fill="rgb(248,63,30)" rx="2" ry="2" />
<text text-anchor="" x="283.42" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (7 samples, 0.52%)</title><rect x="657.9" y="309" width="6.2" height="15.0" fill="rgb(207,192,28)" rx="2" ry="2" />
<text text-anchor="" x="660.95" y="319.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (9 samples, 0.67%)</title><rect x="656.2" y="341" width="7.9" height="15.0" fill="rgb(233,82,48)" rx="2" ry="2" />
<text text-anchor="" x="659.19" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku.generate (638 samples, 47.47%)</title><rect x="301.5" y="437" width="560.1" height="15.0" fill="rgb(251,153,11)" rx="2" ry="2" />
<text text-anchor="" x="304.49" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku.generate</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku.validate_board (1 samples, 0.07%)</title><rect x="496.4" y="389" width="0.9" height="15.0" fill="rgb(234,94,37)" rx="2" ry="2" />
<text text-anchor="" x="499.40" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (97 samples, 7.22%)</title><rect x="402.5" y="341" width="85.1" height="15.0" fill="rgb(228,16,18)" rx="2" ry="2" />
<text text-anchor="" x="405.46" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._el..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (2 samples, 0.15%)</title><rect x="480.6" y="229" width="1.8" height="15.0" fill="rgb(242,93,4)" rx="2" ry="2" />
<text text-anchor="" x="483.60" y="239.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (9 samples, 0.67%)</title><rect x="522.7" y="165" width="7.9" height="15.0" fill="rgb(241,85,28)" rx="2" ry="2" />
<text text-anchor="" x="525.74" y="175.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (22 samples, 1.64%)</title><rect x="511.3" y="325" width="19.3" height="15.0" fill="rgb(249,189,9)" rx="2" ry="2" />
<text text-anchor="" x="514.32" y="335.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="521.9" y="53" width="0.8" height="15.0" fill="rgb(237,170,41)" rx="2" ry="2" />
<text text-anchor="" x="524.86" y="63.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (21 samples, 1.56%)</title><rect x="512.2" y="261" width="18.4" height="15.0" fill="rgb(222,222,16)" rx="2" ry="2" />
<text text-anchor="" x="515.20" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (19 samples, 1.41%)</title><rect x="514.0" y="181" width="16.6" height="15.0" fill="rgb(225,74,53)" rx="2" ry="2" />
<text text-anchor="" x="516.96" y="191.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (6 samples, 0.45%)</title><rect x="491.1" y="277" width="5.3" height="15.0" fill="rgb(221,33,42)" rx="2" ry="2" />
<text text-anchor="" x="494.13" y="287.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._in (11 samples, 0.82%)</title><rect x="825.6" y="373" width="9.7" height="15.0" fill="rgb(231,207,47)" rx="2" ry="2" />
<text text-anchor="" x="828.64" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (5 samples, 0.37%)</title><rect x="483.2" y="325" width="4.4" height="15.0" fill="rgb(252,177,30)" rx="2" ry="2" />
<text text-anchor="" x="486.23" y="335.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._cross (51 samples, 3.79%)</title><rect x="28.4" y="421" width="44.8" height="15.0" fill="rgb(216,112,9)" rx="2" ry="2" />
<text text-anchor="" x="31.44" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudo..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._get_square_vals_map (5 samples, 0.37%)</title><rect x="322.6" y="405" width="4.3" height="15.0" fill="rgb(207,80,28)" rx="2" ry="2" />
<text text-anchor="" x="325.56" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (8 samples, 0.60%)</title><rect x="515.7" y="101" width="7.0" height="15.0" fill="rgb(224,29,48)" rx="2" ry="2" />
<text text-anchor="" x="518.71" y="111.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (2 samples, 0.15%)</title><rect x="845.8" y="341" width="1.8" height="15.0" fill="rgb(249,82,14)" rx="2" ry="2" />
<text text-anchor="" x="848.83" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku.print_board (11 samples, 0.82%)</title><rect x="1180.3" y="453" width="9.7" height="15.0" fill="rgb(207,168,29)" rx="2" ry="2" />
<text text-anchor="" x="1183.34" y="463.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (159 samples, 11.83%)</title><rect x="356.8" y="357" width="139.6" height="15.0" fill="rgb(248,63,2)" rx="2" ry="2" />
<text text-anchor="" x="359.80" y="367.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._eliminate</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (162 samples, 12.05%)</title><rect x="354.2" y="373" width="142.2" height="15.0" fill="rgb(233,207,10)" rx="2" ry="2" />
<text text-anchor="" x="357.17" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._assign</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (8 samples, 0.60%)</title><rect x="847.6" y="389" width="7.0" height="15.0" fill="rgb(252,109,28)" rx="2" ry="2" />
<text text-anchor="" x="850.59" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku.solve (206 samples, 15.33%)</title><rect x="349.8" y="405" width="180.8" height="15.0" fill="rgb(254,171,5)" rx="2" ry="2" />
<text text-anchor="" x="352.78" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku.solve</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._in (13 samples, 0.97%)</title><rect x="964.4" y="405" width="11.4" height="15.0" fill="rgb(244,153,0)" rx="2" ry="2" />
<text text-anchor="" x="967.36" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (6 samples, 0.45%)</title><rect x="842.3" y="373" width="5.3" height="15.0" fill="rgb(234,74,43)" rx="2" ry="2" />
<text text-anchor="" x="845.32" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (3 samples, 0.22%)</title><rect x="852.0" y="341" width="2.6" height="15.0" fill="rgb(250,183,39)" rx="2" ry="2" />
<text text-anchor="" x="854.98" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (3 samples, 0.22%)</title><rect x="653.6" y="325" width="2.6" height="15.0" fill="rgb(220,27,12)" rx="2" ry="2" />
<text text-anchor="" x="656.56" y="335.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._force_range (1 samples, 0.07%)</title><rect x="1167.2" y="437" width="0.9" height="15.0" fill="rgb(221,147,2)" rx="2" ry="2" />
<text text-anchor="" x="1170.17" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (10 samples, 0.74%)</title><rect x="642.1" y="341" width="8.8" height="15.0" fill="rgb(218,0,52)" rx="2" ry="2" />
<text text-anchor="" x="645.14" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._shuffle (8 samples, 0.60%)</title><rect x="854.6" y="421" width="7.0" height="15.0" fill="rgb(214,52,31)" rx="2" ry="2" />
<text text-anchor="" x="857.61" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (88 samples, 6.55%)</title><rect x="573.7" y="373" width="77.2" height="15.0" fill="rgb(238,133,4)" rx="2" ry="2" />
<text text-anchor="" x="576.66" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku.validate_board (8 samples, 0.60%)</title><rect x="291.8" y="421" width="7.1" height="15.0" fill="rgb(252,144,32)" rx="2" ry="2" />
<text text-anchor="" x="294.83" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (141 samples, 10.49%)</title><rect x="723.8" y="389" width="123.8" height="15.0" fill="rgb(253,38,27)" rx="2" ry="2" />
<text text-anchor="" x="726.79" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._eliminate</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="655.3" y="309" width="0.9" height="15.0" fill="rgb(235,187,26)" rx="2" ry="2" />
<text text-anchor="" x="658.31" y="319.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (21 samples, 1.56%)</title><rect x="512.2" y="277" width="18.4" height="15.0" fill="rgb(209,80,52)" rx="2" ry="2" />
<text text-anchor="" x="515.20" y="287.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku.validate_board (1 samples, 0.07%)</title><rect x="348.0" y="389" width="0.9" height="15.0" fill="rgb(243,45,15)" rx="2" ry="2" />
<text text-anchor="" x="351.02" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="492.9" y="229" width="0.9" height="15.0" fill="rgb(215,189,3)" rx="2" ry="2" />
<text text-anchor="" x="495.89" y="239.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="492.9" y="245" width="0.9" height="15.0" fill="rgb(210,119,25)" rx="2" ry="2" />
<text text-anchor="" x="495.89" y="255.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._get_square_vals_map (1 samples, 0.07%)</title><rect x="348.9" y="389" width="0.9" height="15.0" fill="rgb(224,182,11)" rx="2" ry="2" />
<text text-anchor="" x="351.90" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (2 samples, 0.15%)</title><rect x="480.6" y="245" width="1.8" height="15.0" fill="rgb(231,208,37)" rx="2" ry="2" />
<text text-anchor="" x="483.60" y="255.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (7 samples, 0.52%)</title><rect x="643.0" y="325" width="6.2" height="15.0" fill="rgb(219,177,37)" rx="2" ry="2" />
<text text-anchor="" x="646.02" y="335.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku.validate_board (1 samples, 0.07%)</title><rect x="1189.1" y="437" width="0.9" height="15.0" fill="rgb(214,132,22)" rx="2" ry="2" />
<text text-anchor="" x="1192.12" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (10 samples, 0.74%)</title><rect x="487.6" y="341" width="8.8" height="15.0" fill="rgb(238,159,40)" rx="2" ry="2" />
<text text-anchor="" x="490.62" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (3 samples, 0.22%)</title><rect x="480.6" y="277" width="2.6" height="15.0" fill="rgb(252,54,31)" rx="2" ry="2" />
<text text-anchor="" x="483.60" y="287.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._in (1 samples, 0.07%)</title><rect x="635.1" y="341" width="0.9" height="15.0" fill="rgb(252,52,19)" rx="2" ry="2" />
<text text-anchor="" x="638.12" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (15 samples, 1.12%)</title><rect x="650.9" y="357" width="13.2" height="15.0" fill="rgb(209,190,33)" rx="2" ry="2" />
<text text-anchor="" x="653.92" y="367.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (22 samples, 1.64%)</title><rect x="511.3" y="341" width="19.3" height="15.0" fill="rgb(234,155,25)" rx="2" ry="2" />
<text text-anchor="" x="514.32" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._get_candidates_map (163 samples, 12.13%)</title><rect x="353.3" y="389" width="143.1" height="15.0" fill="rgb(211,114,38)" rx="2" ry="2" />
<text text-anchor="" x="356.29" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._get_candid..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (2 samples, 0.15%)</title><rect x="852.9" y="325" width="1.7" height="15.0" fill="rgb(241,183,45)" rx="2" ry="2" />
<text text-anchor="" x="855.86" y="335.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (8 samples, 0.60%)</title><rect x="835.3" y="373" width="7.0" height="15.0" fill="rgb(209,76,23)" rx="2" ry="2" />
<text text-anchor="" x="838.30" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="637.8" y="277" width="0.8" height="15.0" fill="rgb(254,222,3)" rx="2" ry="2" />
<text text-anchor="" x="640.75" y="287.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="663.2" y="261" width="0.9" height="15.0" fill="rgb(247,63,36)" rx="2" ry="2" />
<text text-anchor="" x="666.21" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (8 samples, 0.60%)</title><rect x="515.7" y="117" width="7.0" height="15.0" fill="rgb(254,168,14)" rx="2" ry="2" />
<text text-anchor="" x="518.71" y="127.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (8 samples, 0.60%)</title><rect x="847.6" y="373" width="7.0" height="15.0" fill="rgb(221,59,22)" rx="2" ry="2" />
<text text-anchor="" x="850.59" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._get_square_units_map (96 samples, 7.14%)</title><rect x="115.4" y="421" width="84.2" height="15.0" fill="rgb(211,99,13)" rx="2" ry="2" />
<text text-anchor="" x="118.36" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._g..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._get_square_vals_map (1 samples, 0.07%)</title><rect x="353.3" y="373" width="0.9" height="15.0" fill="rgb(207,191,34)" rx="2" ry="2" />
<text text-anchor="" x="356.29" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._shuffle (4 samples, 0.30%)</title><rect x="666.7" y="405" width="3.5" height="15.0" fill="rgb(229,183,35)" rx="2" ry="2" />
<text text-anchor="" x="669.73" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._strip_dups (2 samples, 0.15%)</title><rect x="665.0" y="405" width="1.7" height="15.0" fill="rgb(225,116,35)" rx="2" ry="2" />
<text text-anchor="" x="667.97" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (348 samples, 25.89%)</title><rect x="861.6" y="437" width="305.6" height="15.0" fill="rgb(227,197,51)" rx="2" ry="2" />
<text text-anchor="" x="864.64" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._assign</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (341 samples, 25.37%)</title><rect x="867.8" y="421" width="299.4" height="15.0" fill="rgb(212,29,13)" rx="2" ry="2" />
<text text-anchor="" x="870.78" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._eliminate</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (4 samples, 0.30%)</title><rect x="1163.7" y="373" width="3.5" height="15.0" fill="rgb(252,82,27)" rx="2" ry="2" />
<text text-anchor="" x="1166.66" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>:program (1,344 samples, 100.00%)</title><rect x="10.0" y="469" width="1180.0" height="15.0" fill="rgb(208,227,38)" rx="2" ry="2" />
<text text-anchor="" x="13.00" y="479.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >:program</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (209 samples, 15.55%)</title><rect x="975.8" y="405" width="183.5" height="15.0" fill="rgb(226,63,16)" rx="2" ry="2" />
<text text-anchor="" x="978.77" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._eliminate</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (210 samples, 15.62%)</title><rect x="670.2" y="421" width="184.4" height="15.0" fill="rgb(240,0,8)" rx="2" ry="2" />
<text text-anchor="" x="673.24" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._assign</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._shuffle (14 samples, 1.04%)</title><rect x="1168.1" y="437" width="12.2" height="15.0" fill="rgb(220,35,44)" rx="2" ry="2" />
<text text-anchor="" x="1171.05" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._get_square_peers_map (71 samples, 5.28%)</title><rect x="199.6" y="421" width="62.4" height="15.0" fill="rgb(228,40,38)" rx="2" ry="2" />
<text text-anchor="" x="202.64" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="637.8" y="325" width="0.8" height="15.0" fill="rgb(249,77,5)" rx="2" ry="2" />
<text text-anchor="" x="640.75" y="335.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (12 samples, 0.89%)</title><rect x="640.4" y="357" width="10.5" height="15.0" fill="rgb(231,72,52)" rx="2" ry="2" />
<text text-anchor="" x="643.39" y="367.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (22 samples, 1.64%)</title><rect x="511.3" y="309" width="19.3" height="15.0" fill="rgb(210,158,27)" rx="2" ry="2" />
<text text-anchor="" x="514.32" y="319.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (3 samples, 0.22%)</title><rect x="845.0" y="357" width="2.6" height="15.0" fill="rgb(209,208,0)" rx="2" ry="2" />
<text text-anchor="" x="847.96" y="367.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (1 samples, 0.07%)</title><rect x="637.8" y="309" width="0.8" height="15.0" fill="rgb(252,222,33)" rx="2" ry="2" />
<text text-anchor="" x="640.75" y="319.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (10 samples, 0.74%)</title><rect x="631.6" y="357" width="8.8" height="15.0" fill="rgb(206,207,37)" rx="2" ry="2" />
<text text-anchor="" x="634.61" y="367.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>all (1,344 samples, 100%)</title><rect x="10.0" y="485" width="1180.0" height="15.0" fill="rgb(226,78,31)" rx="2" ry="2" />
<text text-anchor="" x="13.00" y="495.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (21 samples, 1.56%)</title><rect x="512.2" y="229" width="18.4" height="15.0" fill="rgb(219,83,3)" rx="2" ry="2" />
<text text-anchor="" x="515.20" y="239.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (2 samples, 0.15%)</title><rect x="662.3" y="293" width="1.8" height="15.0" fill="rgb(216,163,30)" rx="2" ry="2" />
<text text-anchor="" x="665.34" y="303.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (2 samples, 0.15%)</title><rect x="649.2" y="309" width="1.7" height="15.0" fill="rgb(212,61,22)" rx="2" ry="2" />
<text text-anchor="" x="652.17" y="319.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="637.8" y="261" width="0.8" height="15.0" fill="rgb(205,135,24)" rx="2" ry="2" />
<text text-anchor="" x="640.75" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (9 samples, 0.67%)</title><rect x="488.5" y="325" width="7.9" height="15.0" fill="rgb(234,193,20)" rx="2" ry="2" />
<text text-anchor="" x="491.50" y="335.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (6 samples, 0.45%)</title><rect x="491.1" y="309" width="5.3" height="15.0" fill="rgb(242,204,45)" rx="2" ry="2" />
<text text-anchor="" x="494.13" y="319.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (6 samples, 0.45%)</title><rect x="1154.0" y="373" width="5.3" height="15.0" fill="rgb(243,32,20)" rx="2" ry="2" />
<text text-anchor="" x="1157.00" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (152 samples, 11.31%)</title><rect x="530.6" y="405" width="133.5" height="15.0" fill="rgb(250,47,22)" rx="2" ry="2" />
<text text-anchor="" x="533.64" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._assign</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="648.3" y="277" width="0.9" height="15.0" fill="rgb(231,112,43)" rx="2" ry="2" />
<text text-anchor="" x="651.29" y="287.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="481.5" y="213" width="0.9" height="15.0" fill="rgb(251,94,45)" rx="2" ry="2" />
<text text-anchor="" x="484.47" y="223.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._search (38 samples, 2.83%)</title><rect x="497.3" y="389" width="33.3" height="15.0" fill="rgb(253,127,25)" rx="2" ry="2" />
<text text-anchor="" x="500.28" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >su..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (3 samples, 0.22%)</title><rect x="493.8" y="261" width="2.6" height="15.0" fill="rgb(211,35,23)" rx="2" ry="2" />
<text text-anchor="" x="496.76" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (10 samples, 0.74%)</title><rect x="514.0" y="165" width="8.7" height="15.0" fill="rgb(206,82,14)" rx="2" ry="2" />
<text text-anchor="" x="516.96" y="175.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>:anonymous (276 samples, 20.54%)</title><rect x="19.7" y="453" width="242.3" height="15.0" fill="rgb(224,129,14)" rx="2" ry="2" />
<text text-anchor="" x="22.66" y="463.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >:anonymous</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (19 samples, 1.41%)</title><rect x="514.0" y="213" width="16.6" height="15.0" fill="rgb(242,202,3)" rx="2" ry="2" />
<text text-anchor="" x="516.96" y="223.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (6 samples, 0.45%)</title><rect x="491.1" y="293" width="5.3" height="15.0" fill="rgb(251,4,13)" rx="2" ry="2" />
<text text-anchor="" x="494.13" y="303.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku.generate (1,046 samples, 77.83%)</title><rect x="262.0" y="453" width="918.3" height="15.0" fill="rgb(234,143,0)" rx="2" ry="2" />
<text text-anchor="" x="264.98" y="463.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku.generate</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (3 samples, 0.22%)</title><rect x="480.6" y="293" width="2.6" height="15.0" fill="rgb(217,142,5)" rx="2" ry="2" />
<text text-anchor="" x="483.60" y="303.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._rand_range (2 samples, 0.15%)</title><rect x="668.5" y="389" width="1.7" height="15.0" fill="rgb(229,154,53)" rx="2" ry="2" />
<text text-anchor="" x="671.48" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (3 samples, 0.22%)</title><rect x="646.5" y="309" width="2.7" height="15.0" fill="rgb(210,40,49)" rx="2" ry="2" />
<text text-anchor="" x="649.53" y="319.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (4 samples, 0.30%)</title><rect x="1155.8" y="357" width="3.5" height="15.0" fill="rgb(240,222,4)" rx="2" ry="2" />
<text text-anchor="" x="1158.76" y="367.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="663.2" y="277" width="0.9" height="15.0" fill="rgb(232,62,33)" rx="2" ry="2" />
<text text-anchor="" x="666.21" y="287.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (1 samples, 0.07%)</title><rect x="482.4" y="261" width="0.8" height="15.0" fill="rgb(224,204,28)" rx="2" ry="2" />
<text text-anchor="" x="485.35" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (9 samples, 0.67%)</title><rect x="514.8" y="149" width="7.9" height="15.0" fill="rgb(247,218,42)" rx="2" ry="2" />
<text text-anchor="" x="517.84" y="159.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (23 samples, 1.71%)</title><rect x="510.4" y="357" width="20.2" height="15.0" fill="rgb(220,186,9)" rx="2" ry="2" />
<text text-anchor="" x="513.45" y="367.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._in (27 samples, 2.01%)</title><rect x="1128.5" y="389" width="23.7" height="15.0" fill="rgb(225,196,45)" rx="2" ry="2" />
<text text-anchor="" x="1131.54" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >s..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="521.9" y="69" width="0.8" height="15.0" fill="rgb(218,54,51)" rx="2" ry="2" />
<text text-anchor="" x="524.86" y="79.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (208 samples, 15.48%)</title><rect x="672.0" y="405" width="182.6" height="15.0" fill="rgb(218,88,31)" rx="2" ry="2" />
<text text-anchor="" x="674.99" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._eliminate</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (9 samples, 0.67%)</title><rect x="656.2" y="325" width="7.9" height="15.0" fill="rgb(239,142,29)" rx="2" ry="2" />
<text text-anchor="" x="659.19" y="335.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (23 samples, 1.71%)</title><rect x="510.4" y="373" width="20.2" height="15.0" fill="rgb(205,146,21)" rx="2" ry="2" />
<text text-anchor="" x="513.45" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (15 samples, 1.12%)</title><rect x="650.9" y="373" width="13.2" height="15.0" fill="rgb(209,223,31)" rx="2" ry="2" />
<text text-anchor="" x="653.92" y="383.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (7 samples, 0.52%)</title><rect x="477.1" y="325" width="6.1" height="15.0" fill="rgb(226,172,9)" rx="2" ry="2" />
<text text-anchor="" x="480.08" y="335.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._get_square_vals_map (3 samples, 0.22%)</title><rect x="298.9" y="421" width="2.6" height="15.0" fill="rgb(250,190,31)" rx="2" ry="2" />
<text text-anchor="" x="301.85" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._rand_range (1 samples, 0.07%)</title><rect x="664.1" y="405" width="0.9" height="15.0" fill="rgb(216,50,28)" rx="2" ry="2" />
<text text-anchor="" x="667.09" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (21 samples, 1.56%)</title><rect x="512.2" y="245" width="18.4" height="15.0" fill="rgb(213,146,42)" rx="2" ry="2" />
<text text-anchor="" x="515.20" y="255.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (2 samples, 0.15%)</title><rect x="660.6" y="277" width="1.7" height="15.0" fill="rgb(246,92,46)" rx="2" ry="2" />
<text text-anchor="" x="663.58" y="287.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (2 samples, 0.15%)</title><rect x="638.6" y="341" width="1.8" height="15.0" fill="rgb(213,39,38)" rx="2" ry="2" />
<text text-anchor="" x="641.63" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (1 samples, 0.07%)</title><rect x="521.9" y="85" width="0.8" height="15.0" fill="rgb(241,88,50)" rx="2" ry="2" />
<text text-anchor="" x="524.86" y="95.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._in (1 samples, 0.07%)</title><rect x="1189.1" y="421" width="0.9" height="15.0" fill="rgb(250,193,33)" rx="2" ry="2" />
<text text-anchor="" x="1192.12" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._in (6 samples, 0.45%)</title><rect x="293.6" y="405" width="5.3" height="15.0" fill="rgb(254,13,15)" rx="2" ry="2" />
<text text-anchor="" x="296.59" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._cross (34 samples, 2.53%)</title><rect x="85.5" y="405" width="29.9" height="15.0" fill="rgb(232,189,17)" rx="2" ry="2" />
<text text-anchor="" x="88.51" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >su..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (5 samples, 0.37%)</title><rect x="657.9" y="293" width="4.4" height="15.0" fill="rgb(234,44,46)" rx="2" ry="2" />
<text text-anchor="" x="660.95" y="303.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._rand_range (7 samples, 0.52%)</title><rect x="1174.2" y="421" width="6.1" height="15.0" fill="rgb(219,179,21)" rx="2" ry="2" />
<text text-anchor="" x="1177.20" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (5 samples, 0.37%)</title><rect x="651.8" y="341" width="4.4" height="15.0" fill="rgb(247,49,4)" rx="2" ry="2" />
<text text-anchor="" x="654.80" y="351.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="650.0" y="293" width="0.9" height="15.0" fill="rgb(245,13,25)" rx="2" ry="2" />
<text text-anchor="" x="653.04" y="303.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (2 samples, 0.15%)</title><rect x="480.6" y="261" width="1.8" height="15.0" fill="rgb(234,221,36)" rx="2" ry="2" />
<text text-anchor="" x="483.60" y="271.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (9 samples, 0.67%)</title><rect x="1159.3" y="389" width="7.9" height="15.0" fill="rgb(220,182,35)" rx="2" ry="2" />
<text text-anchor="" x="1162.27" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (9 samples, 0.67%)</title><rect x="1159.3" y="405" width="7.9" height="15.0" fill="rgb(212,228,25)" rx="2" ry="2" />
<text text-anchor="" x="1162.27" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._in (4 samples, 0.30%)</title><rect x="319.0" y="405" width="3.6" height="15.0" fill="rgb(254,75,40)" rx="2" ry="2" />
<text text-anchor="" x="322.05" y="415.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (3 samples, 0.22%)</title><rect x="849.3" y="357" width="2.7" height="15.0" fill="rgb(252,26,17)" rx="2" ry="2" />
<text text-anchor="" x="852.35" y="367.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._get_all_units (48 samples, 3.57%)</title><rect x="73.2" y="421" width="42.2" height="15.0" fill="rgb(217,228,51)" rx="2" ry="2" />
<text text-anchor="" x="76.21" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sud..</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku.generate (391 samples, 29.09%)</title><rect x="326.9" y="421" width="343.3" height="15.0" fill="rgb(212,165,3)" rx="2" ry="2" />
<text text-anchor="" x="329.95" y="431.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku.generate</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (2 samples, 0.15%)</title><rect x="649.2" y="325" width="1.7" height="15.0" fill="rgb(225,214,52)" rx="2" ry="2" />
<text text-anchor="" x="652.17" y="335.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (8 samples, 0.60%)</title><rect x="1152.2" y="389" width="7.1" height="15.0" fill="rgb(208,120,14)" rx="2" ry="2" />
<text text-anchor="" x="1155.25" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._assign (3 samples, 0.22%)</title><rect x="852.0" y="357" width="2.6" height="15.0" fill="rgb(244,138,17)" rx="2" ry="2" />
<text text-anchor="" x="854.98" y="367.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (8 samples, 0.60%)</title><rect x="515.7" y="133" width="7.0" height="15.0" fill="rgb(223,33,27)" rx="2" ry="2" />
<text text-anchor="" x="518.71" y="143.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (147 samples, 10.94%)</title><rect x="535.0" y="389" width="129.1" height="15.0" fill="rgb(246,155,17)" rx="2" ry="2" />
<text text-anchor="" x="538.03" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >sudoku._eliminate</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (19 samples, 1.41%)</title><rect x="514.0" y="197" width="16.6" height="15.0" fill="rgb(240,9,5)" rx="2" ry="2" />
<text text-anchor="" x="516.96" y="207.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>initialize (269 samples, 20.01%)</title><rect x="25.8" y="437" width="236.2" height="15.0" fill="rgb(254,201,8)" rx="2" ry="2" />
<text text-anchor="" x="28.80" y="447.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" >initialize</text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._in (3 samples, 0.22%)</title><rect x="721.2" y="389" width="2.6" height="15.0" fill="rgb(243,120,20)" rx="2" ry="2" />
<text text-anchor="" x="724.16" y="399.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
<g class="func_g" onmouseover="s(this)" onmouseout="c()" onclick="zoom(this)">
<title>sudoku._eliminate (1 samples, 0.07%)</title><rect x="637.8" y="293" width="0.8" height="15.0" fill="rgb(223,72,52)" rx="2" ry="2" />
<text text-anchor="" x="640.75" y="303.5" font-size="12" font-family="Verdana" fill="rgb(0,0,0)" ></text>
</g>
</svg>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment