Skip to content

Instantly share code, notes, and snippets.

@gka
Last active February 21, 2020 15:14
Show Gist options
  • Save gka/5145771 to your computer and use it in GitHub Desktop.
Save gka/5145771 to your computer and use it in GitHub Desktop.
d3 dependency network
<?xml version="1.0" encoding="utf-8"?><gexf version="1.1" xmlns="http://www.gexf.net/1.1draft" xmlns:viz="http://www.gexf.net/1.1draft/viz" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/XMLSchema-instance">
<graph defaultedgetype="directed" mode="static">
<attributes class="edge" mode="static">
<attribute id="0" title="tree" type="boolean" />
</attributes>
<nodes>
<node id="d3.ease" label="d3.ease" />
<node id="d3.behavior.drag" label="d3.behavior.drag" />
<node id="d3.layout.pack" label="d3.layout.pack" />
<node id="d3.scale.linear" label="d3.scale.linear" />
<node id="d3.time.second" label="d3.time.second" />
<node id="d3.geo.clip.circle" label="d3.geo.clip.circle" />
<node id="d3.geo.orthographic" label="d3.geo.orthographic" />
<node id="d3.transition.filter" label="d3.transition.filter" />
<node id="d3.ascending" label="d3.ascending" />
<node id="d3.layout.cluster" label="d3.layout.cluster" />
<node id="d3" label="d3" />
<node id="d3.time.day" label="d3.time.day" />
<node id="d3.geo.azimuthal" label="d3.geo.azimuthal" />
<node id="d3.geo.centroid" label="d3.geo.centroid" />
<node id="d3.transition.remove" label="d3.transition.remove" />
<node id="d3.transition.selectAll" label="d3.transition.selectAll" />
<node id="d3.geo.gnomonic" label="d3.geo.gnomonic" />
<node id="d3.time.year" label="d3.time.year" />
<node id="d3.geo.compose" label="d3.geo.compose" />
<node id="d3.time.minute" label="d3.time.minute" />
<node id="d3.layout.bundle" label="d3.layout.bundle" />
<node id="d3.selection.node" label="d3.selection.node" />
<node id="d3.mean" label="d3.mean" />
<node id="d3.geo" label="d3.geo" />
<node id="d3.sum" label="d3.sum" />
<node id="d3.geom.quadtree" label="d3.geom.quadtree" />
<node id="d3.map" label="d3.map" />
<node id="d3.selection.select" label="d3.selection.select" />
<node id="d3.zip" label="d3.zip" />
<node id="d3.layout.histogram" label="d3.layout.histogram" />
<node id="d3.max" label="d3.max" />
<node id="d3.scale.nice" label="d3.scale.nice" />
<node id="d3.extent" label="d3.extent" />
<node id="d3.transition.each" label="d3.transition.each" />
<node id="d3.geo.equirectangular" label="d3.geo.equirectangular" />
<node id="d3.time.format.locale" label="d3.time.format.locale" />
<node id="d3.dispatch" label="d3.dispatch" />
<node id="d3.transform" label="d3.transform" />
<node id="d3.noop" label="d3.noop" />
<node id="d3.geo.projection" label="d3.geo.projection" />
<node id="d3.selection.on" label="d3.selection.on" />
<node id="d3.behavior.zoom" label="d3.behavior.zoom" />
<node id="d3.svg.area.radial" label="d3.svg.area.radial" />
<node id="d3.layout.pie" label="d3.layout.pie" />
<node id="d3.time.scale" label="d3.time.scale" />
<node id="d3.layout" label="d3.layout" />
<node id="d3.dsv.csv" label="d3.dsv.csv" />
<node id="d3.selection.classed" label="d3.selection.classed" />
<node id="d3.min" label="d3.min" />
<node id="d3.nest" label="d3.nest" />
<node id="d3.selection.data" label="d3.selection.data" />
<node id="d3.xml" label="d3.xml" />
<node id="d3.layout.partition" label="d3.layout.partition" />
<node id="d3.transition.attr" label="d3.transition.attr" />
<node id="d3.hsl" label="d3.hsl" />
<node id="d3.selection.root" label="d3.selection.root" />
<node id="d3.geo.path.context" label="d3.geo.path.context" />
<node id="d3.geo.clip" label="d3.geo.clip" />
<node id="d3.geo.resample" label="d3.geo.resample" />
<node id="d3.geo.path.area" label="d3.geo.path.area" />
<node id="d3.selection.attr" label="d3.selection.attr" />
<node id="d3.geo.rotation" label="d3.geo.rotation" />
<node id="d3.bisect" label="d3.bisect" />
<node id="d3.selection.each" label="d3.selection.each" />
<node id="d3.identity" label="d3.identity" />
<node id="d3.dsv.tsv" label="d3.dsv.tsv" />
<node id="d3.selection.html" label="d3.selection.html" />
<node id="d3.random" label="d3.random" />
<node id="d3.scale.identity" label="d3.scale.identity" />
<node id="d3.xyz" label="d3.xyz" />
<node id="d3.collapse" label="d3.collapse" />
<node id="d3.geo.area" label="d3.geo.area" />
<node id="d3.geo.azimuthal.equidistant" label="d3.geo.azimuthal.equidistant" />
<node id="d3.geo.path.centroid" label="d3.geo.path.centroid" />
<node id="d3.transition.tween" label="d3.transition.tween" />
<node id="d3.compat.date" label="d3.compat.date" />
<node id="d3.geo.mercator" label="d3.geo.mercator" />
<node id="d3.format" label="d3.format" />
<node id="d3.layout.stack" label="d3.layout.stack" />
<node id="d3.time.format" label="d3.time.format" />
<node id="d3.transition.style" label="d3.transition.style" />
<node id="d3.time.interval" label="d3.time.interval" />
<node id="d3.selection" label="d3.selection" />
<node id="d3.time.scale.utc" label="d3.time.scale.utc" />
<node id="d3.range" label="d3.range" />
<node id="d3.svg.area" label="d3.svg.area" />
<node id="d3.selection.enter.select" label="d3.selection.enter.select" />
<node id="d3.svg.diagonal" label="d3.svg.diagonal" />
<node id="d3.number" label="d3.number" />
<node id="d3.transition.duration" label="d3.transition.duration" />
<node id="d3.core.module" label="d3.core.module" />
<node id="d3.hcl" label="d3.hcl" />
<node id="d3.touches" label="d3.touches" />
<node id="d3.html" label="d3.html" />
<node id="d3.transition" label="d3.transition" />
<node id="d3.selection.enter" label="d3.selection.enter" />
<node id="d3.quantile" label="d3.quantile" />
<node id="d3.geo.bounds" label="d3.geo.bounds" />
<node id="d3.uninterpolate" label="d3.uninterpolate" />
<node id="d3.core" label="d3.core" />
<node id="d3.selection.text" label="d3.selection.text" />
<node id="d3.transpose" label="d3.transpose" />
<node id="d3.svg" label="d3.svg" />
<node id="d3.dsv" label="d3.dsv" />
<node id="d3.round" label="d3.round" />
<node id="d3.descending" label="d3.descending" />
<node id="d3.formatPrefix" label="d3.formatPrefix" />
<node id="d3.scale.log" label="d3.scale.log" />
<node id="d3.transition.delay" label="d3.transition.delay" />
<node id="d3.layout.treemap" label="d3.layout.treemap" />
<node id="d3.time.month" label="d3.time.month" />
<node id="d3.scale.bilinear" label="d3.scale.bilinear" />
<node id="d3.layout.hierarchy" label="d3.layout.hierarchy" />
<node id="d3.array" label="d3.array" />
<node id="d3.ns" label="d3.ns" />
<node id="d3.time" label="d3.time" />
<node id="d3.geo.albers" label="d3.geo.albers" />
<node id="d3.layout.chord" label="d3.layout.chord" />
<node id="d3.geo.clip.antimeridian" label="d3.geo.clip.antimeridian" />
<node id="d3.compat.style" label="d3.compat.style" />
<node id="d3.selection.sort" label="d3.selection.sort" />
<node id="d3.class" label="d3.class" />
<node id="d3.time.week" label="d3.time.week" />
<node id="d3.selection.remove" label="d3.selection.remove" />
<node id="d3.selection.property" label="d3.selection.property" />
<node id="d3.transition.select" label="d3.transition.select" />
<node id="d3.geo.azimuthal.equal.area" label="d3.geo.azimuthal.equal.area" />
<node id="d3.scale.quantile" label="d3.scale.quantile" />
<node id="d3.interpolate" label="d3.interpolate" />
<node id="d3.geo.stream" label="d3.geo.stream" />
<node id="d3.scale" label="d3.scale" />
<node id="d3.timer" label="d3.timer" />
<node id="d3.shuffle" label="d3.shuffle" />
<node id="d3.geo.cartesian" label="d3.geo.cartesian" />
<node id="d3.compat" label="d3.compat" />
<node id="d3.svg.axis" label="d3.svg.axis" />
<node id="d3.keys" label="d3.keys" />
<node id="d3.geo.path" label="d3.geo.path" />
<node id="d3.geo.circle" label="d3.geo.circle" />
<node id="d3.geo.haversin" label="d3.geo.haversin" />
<node id="d3.requote" label="d3.requote" />
<node id="d3.functor" label="d3.functor" />
<node id="d3.layout.force" label="d3.layout.force" />
<node id="d3.svg.line" label="d3.svg.line" />
<node id="d3.svg.diagonal.radial" label="d3.svg.diagonal.radial" />
<node id="d3.geo.spherical" label="d3.geo.spherical" />
<node id="d3.geom.delaunay" label="d3.geom.delaunay" />
<node id="d3.merge" label="d3.merge" />
<node id="d3.time.format.iso" label="d3.time.format.iso" />
<node id="d3.scale.ordinal" label="d3.scale.ordinal" />
<node id="d3.time.format.utc" label="d3.time.format.utc" />
<node id="d3.geom.hull" label="d3.geom.hull" />
<node id="d3.format.locale" label="d3.format.locale" />
<node id="d3.svg.chord" label="d3.svg.chord" />
<node id="d3.mouse" label="d3.mouse" />
<node id="d3.transition.ease" label="d3.transition.ease" />
<node id="d3.geo.azimuthal.equal" label="d3.geo.azimuthal.equal" />
<node id="d3.permute" label="d3.permute" />
<node id="d3.svg.symbol" label="d3.svg.symbol" />
<node id="d3.selection.insert" label="d3.selection.insert" />
<node id="d3.rgb" label="d3.rgb" />
<node id="d3.rebind" label="d3.rebind" />
<node id="d3.json" label="d3.json" />
<node id="d3.true" label="d3.true" />
<node id="d3.median" label="d3.median" />
<node id="d3.geo.graticule" label="d3.geo.graticule" />
<node id="d3.scale.quantize" label="d3.scale.quantize" />
<node id="d3.text" label="d3.text" />
<node id="d3.svg.arc" label="d3.svg.arc" />
<node id="d3.geo.greatArc" label="d3.geo.greatArc" />
<node id="d3.scale.sqrt" label="d3.scale.sqrt" />
<node id="d3.svg.line.radial" label="d3.svg.line.radial" />
<node id="d3.values" label="d3.values" />
<node id="d3.selection.empty" label="d3.selection.empty" />
<node id="d3.geo.stereographic" label="d3.geo.stereographic" />
<node id="d3.scale.category" label="d3.scale.category" />
<node id="d3.selection.order" label="d3.selection.order" />
<node id="d3.behavior" label="d3.behavior" />
<node id="d3.entries" label="d3.entries" />
<node id="d3.svg.brush" label="d3.svg.brush" />
<node id="d3.geo.albers.usa" label="d3.geo.albers.usa" />
<node id="d3.selection.datum" label="d3.selection.datum" />
<node id="d3.event" label="d3.event" />
<node id="d3.selection.call" label="d3.selection.call" />
<node id="d3.color" label="d3.color" />
<node id="d3.geom.polygon" label="d3.geom.polygon" />
<node id="d3.lab" label="d3.lab" />
<node id="d3.geo.interpolate" label="d3.geo.interpolate" />
<node id="d3.scale.polylinear" label="d3.scale.polylinear" />
<node id="d3.time.hour" label="d3.time.hour" />
<node id="d3.scale.threshold" label="d3.scale.threshold" />
<node id="d3.selection.style" label="d3.selection.style" />
<node id="d3.geom.voronoi" label="d3.geom.voronoi" />
<node id="d3.layout.tree" label="d3.layout.tree" />
<node id="d3.transition.text" label="d3.transition.text" />
<node id="d3.selection.append" label="d3.selection.append" />
<node id="d3.geo.path.buffer" label="d3.geo.path.buffer" />
<node id="d3.selection.transition" label="d3.selection.transition" />
<node id="d3.selection.filter" label="d3.selection.filter" />
<node id="d3.scale.pow" label="d3.scale.pow" />
<node id="d3.selection.selectAll" label="d3.selection.selectAll" />
<node id="d3.geom" label="d3.geom" />
<node id="d3.xhr" label="d3.xhr" />
</nodes>
<edges>
<edge id="0" source="d3.ease" target="d3.map">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="1" source="d3.ease" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="2" source="d3.behavior.drag" target="d3.touches">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="3" source="d3.behavior.drag" target="d3.selection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="4" source="d3.behavior.drag" target="d3.mouse">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="5" source="d3.behavior.drag" target="d3.event">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="6" source="d3.behavior.drag" target="d3.behavior">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="7" source="d3.behavior.drag" target="d3.rebind">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="8" source="d3.layout.pack" target="d3.layout">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="9" source="d3.layout.pack" target="d3.layout.hierarchy">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="10" source="d3.layout.pack" target="d3.layout.tree">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="11" source="d3.scale.linear" target="d3.interpolate">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="12" source="d3.scale.linear" target="d3.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="13" source="d3.scale.linear" target="d3.range">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="14" source="d3.scale.linear" target="d3.scale.nice">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="15" source="d3.scale.linear" target="d3.rebind">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="16" source="d3.scale.linear" target="d3.format">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="17" source="d3.scale.linear" target="d3">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="18" source="d3.time.second" target="d3.time.second">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="19" source="d3.time.second" target="d3.time.interval">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="20" source="d3.time.second" target="d3.time">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="21" source="d3.geo.clip.circle" target="d3.geo.clip">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="22" source="d3.geo.clip.circle" target="d3.geo.cartesian">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="23" source="d3.geo.clip.circle" target="d3.geo.spherical">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="24" source="d3.geo.clip.circle" target="d3.geo.circle">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="25" source="d3.geo.orthographic" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="26" source="d3.geo.orthographic" target="d3.geo.projection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="27" source="d3.geo.orthographic" target="d3.geo.azimuthal">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="28" source="d3.transition.filter" target="d3.selection.filter">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="29" source="d3.transition.filter" target="d3.transition">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="30" source="d3.ascending" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="31" source="d3.layout.cluster" target="d3.layout">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="32" source="d3.layout.cluster" target="d3.max">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="33" source="d3.layout.cluster" target="d3.layout.hierarchy">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="34" source="d3.layout.cluster" target="d3.layout.tree">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="35" source="d3.time.day" target="d3.time.year">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="36" source="d3.time.day" target="d3.time.day">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="37" source="d3.time.day" target="d3.time.interval">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="38" source="d3.time.day" target="d3.time">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="39" source="d3.geo.azimuthal" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="40" source="d3.geo.centroid" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="41" source="d3.geo.centroid" target="d3.geo.stream">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="42" source="d3.transition.remove" target="d3.transition">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="43" source="d3.transition.selectAll" target="d3.selection.selectAll">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="44" source="d3.transition.selectAll" target="d3.transition">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="45" source="d3.geo.gnomonic" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="46" source="d3.geo.gnomonic" target="d3.geo.projection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="47" source="d3.geo.gnomonic" target="d3.geo.azimuthal">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="48" source="d3.time.year" target="d3.time.year">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="49" source="d3.time.year" target="d3.time.day">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="50" source="d3.time.year" target="d3.time.interval">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="51" source="d3.time.year" target="d3.time">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="52" source="d3.geo.compose" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="53" source="d3.time.minute" target="d3.time.minute">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="54" source="d3.time.minute" target="d3.time.interval">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="55" source="d3.time.minute" target="d3.time">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="56" source="d3.layout.bundle" target="d3.layout">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="57" source="d3.selection.node" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="58" source="d3.mean" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="59" source="d3.mean" target="d3.number">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="60" source="d3.geo" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="61" source="d3.sum" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="62" source="d3.geom.quadtree" target="d3.geom">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="63" source="d3.map" target="d3.class">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="64" source="d3.map" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="65" source="d3.selection.select" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="66" source="d3.zip" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="67" source="d3.zip" target="d3.min">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="68" source="d3.layout.histogram" target="d3.layout">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="69" source="d3.layout.histogram" target="d3.bisect">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="70" source="d3.layout.histogram" target="d3.functor">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="71" source="d3.layout.histogram" target="d3.max">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="72" source="d3.layout.histogram" target="d3.min">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="73" source="d3.max" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="74" source="d3.scale.nice" target="d3.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="75" source="d3.extent" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="76" source="d3.transition.each" target="d3.selection.each">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="77" source="d3.transition.each" target="d3.transition">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="78" source="d3.geo.equirectangular" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="79" source="d3.geo.equirectangular" target="d3.geo.projection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="80" source="d3.time.format.locale" target="d3.time.format">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="81" source="d3.dispatch" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="82" source="d3.transform" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="83" source="d3.noop" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="84" source="d3.geo.projection" target="d3.geo.rotation">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="85" source="d3.geo.projection" target="d3.geo.clip.circle">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="86" source="d3.geo.projection" target="d3.geo.compose">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="87" source="d3.geo.projection" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="88" source="d3.geo.projection" target="d3.geo.resample">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="89" source="d3.geo.projection" target="d3.rebind">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="90" source="d3.selection.on" target="d3.event">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="91" source="d3.selection.on" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="92" source="d3.behavior.zoom" target="d3.touches">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="93" source="d3.behavior.zoom" target="d3.selection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="94" source="d3.behavior.zoom" target="d3.mouse">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="95" source="d3.behavior.zoom" target="d3.event">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="96" source="d3.behavior.zoom" target="d3.behavior">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="97" source="d3.behavior.zoom" target="d3.rebind">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="98" source="d3.svg.area.radial" target="d3.svg.area">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="99" source="d3.layout.pie" target="d3.layout">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="100" source="d3.layout.pie" target="d3.sum">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="101" source="d3.layout.pie" target="d3.range">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="102" source="d3.time.scale" target="d3.bisect">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="103" source="d3.time.scale" target="d3.time.day">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="104" source="d3.time.scale" target="d3.time.hour">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="105" source="d3.time.scale" target="d3.time.month">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="106" source="d3.time.scale" target="d3.scale.linear">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="107" source="d3.time.scale" target="d3.time.second">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="108" source="d3.time.scale" target="d3.scale.nice">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="109" source="d3.time.scale" target="d3.time.week">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="110" source="d3.time.scale" target="d3.time.year">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="111" source="d3.time.scale" target="d3.time.minute">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="112" source="d3.time.scale" target="d3.time">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="113" source="d3.time.scale" target="d3.rebind">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="114" source="d3.time.scale" target="d3.time.format">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="115" source="d3.layout" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="116" source="d3.dsv.csv" target="d3.dsv">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="117" source="d3.selection.classed" target="d3.requote">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="118" source="d3.selection.classed" target="d3.collapse">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="119" source="d3.selection.classed" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="120" source="d3.min" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="121" source="d3.nest" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="122" source="d3.selection.data" target="d3.selection.enter">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="123" source="d3.selection.data" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="124" source="d3.xml" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="125" source="d3.xml" target="d3.xhr">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="126" source="d3.layout.partition" target="d3.layout">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="127" source="d3.layout.partition" target="d3.layout.hierarchy">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="128" source="d3.transition.attr" target="d3.interpolate">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="129" source="d3.transition.attr" target="d3.ns">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="130" source="d3.transition.attr" target="d3.transition.tween">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="131" source="d3.transition.attr" target="d3.transition">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="132" source="d3.hsl" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="133" source="d3.hsl" target="d3.rgb">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="134" source="d3.selection.root" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="135" source="d3.geo.path.context" target="d3.geo.path">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="136" source="d3.geo.clip" target="d3.merge">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="137" source="d3.geo.clip" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="138" source="d3.geo.clip" target="d3.geo.spherical">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="139" source="d3.geo.resample" target="d3.geo.cartesian">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="140" source="d3.geo.resample" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="141" source="d3.geo.path.area" target="d3.geom.polygon">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="142" source="d3.geo.path.area" target="d3.geo.path">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="143" source="d3.selection.attr" target="d3.ns">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="144" source="d3.selection.attr" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="145" source="d3.geo.rotation" target="d3.geo.compose">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="146" source="d3.geo.rotation" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="147" source="d3.bisect" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="148" source="d3.selection.each" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="149" source="d3.identity" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="150" source="d3.dsv.tsv" target="d3.dsv">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="151" source="d3.selection.html" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="152" source="d3.random" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="153" source="d3.scale.identity" target="d3.scale.linear">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="154" source="d3.scale.identity" target="d3.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="155" source="d3.xyz" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="156" source="d3.collapse" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="157" source="d3.geo.area" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="158" source="d3.geo.area" target="d3.geo.stream">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="159" source="d3.geo.azimuthal.equidistant" target="d3.geo">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="160" source="d3.geo.azimuthal.equidistant" target="d3.geo.projection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="161" source="d3.geo.azimuthal.equidistant" target="d3.geo.azimuthal">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="162" source="d3.geo.path.centroid" target="d3.geom.polygon">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="163" source="d3.geo.path.centroid" target="d3.geo.path">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="164" source="d3.transition.tween" target="d3.selection.each">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="165" source="d3.transition.tween" target="d3.transition">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="166" source="d3.compat.date" target="d3.compat">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="167" source="d3.geo.mercator" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="168" source="d3.geo.mercator" target="d3.geo.projection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="169" source="d3.format" target="d3.formatPrefix">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="170" source="d3.format" target="d3.round">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="171" source="d3.format" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="172" source="d3.format" target="d3.map">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="173" source="d3.layout.stack" target="d3.layout">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="174" source="d3.layout.stack" target="d3.permute">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="175" source="d3.layout.stack" target="d3.range">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="176" source="d3.layout.stack" target="d3.map">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="177" source="d3.time.format" target="d3.map">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="178" source="d3.time.format" target="d3.requote">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="179" source="d3.time.format" target="d3.time">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="180" source="d3.transition.style" target="d3.interpolate">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="181" source="d3.transition.style" target="d3.transition.tween">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="182" source="d3.transition.style" target="d3.transition">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="183" source="d3.time.interval" target="d3.time">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="184" source="d3.selection" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="185" source="d3.selection" target="d3.selection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="186" source="d3.time.scale.utc" target="d3.scale.linear">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="187" source="d3.time.scale.utc" target="d3.time.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="188" source="d3.time.scale.utc" target="d3.time.format.utc">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="189" source="d3.range" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="190" source="d3.svg.area" target="d3.svg">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="191" source="d3.svg.area" target="d3.functor">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="192" source="d3.selection.enter.select" target="d3.selection.enter">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="193" source="d3.selection.enter.select" target="d3.selection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="194" source="d3.svg.diagonal" target="d3.svg">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="195" source="d3.svg.diagonal" target="d3.functor">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="196" source="d3.number" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="197" source="d3.transition.duration" target="d3.selection.each">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="198" source="d3.transition.duration" target="d3.transition">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="199" source="d3.core.module" target="d3.core">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="200" source="d3.hcl" target="d3.lab">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="201" source="d3.hcl" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="202" source="d3.hcl" target="d3.rgb">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="203" source="d3.touches" target="d3.mouse">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="204" source="d3.touches" target="d3.event">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="205" source="d3.touches" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="206" source="d3.html" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="207" source="d3.html" target="d3.xhr">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="208" source="d3.transition" target="d3.timer">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="209" source="d3.transition" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="210" source="d3.transition" target="d3.dispatch">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="211" source="d3.transition" target="d3.transition">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="212" source="d3.selection.enter" target="d3.selection.enter">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="213" source="d3.selection.enter" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="214" source="d3.quantile" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="215" source="d3.geo.bounds" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="216" source="d3.geo.bounds" target="d3.geo.stream">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="217" source="d3.uninterpolate" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="218" source="d3.selection.text" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="219" source="d3.transpose" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="220" source="d3.transpose" target="d3.zip">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="221" source="d3.svg" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="222" source="d3.dsv" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="223" source="d3.dsv" target="d3.xhr">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="224" source="d3.round" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="225" source="d3.descending" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="226" source="d3.formatPrefix" target="d3.format">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="227" source="d3.formatPrefix" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="228" source="d3.formatPrefix" target="d3.round">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="229" source="d3.scale.log" target="d3.scale.linear">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="230" source="d3.scale.log" target="d3.format">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="231" source="d3.scale.log" target="d3.scale.nice">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="232" source="d3.scale.log" target="d3.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="233" source="d3.transition.delay" target="d3.selection.each">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="234" source="d3.transition.delay" target="d3.transition">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="235" source="d3.layout.treemap" target="d3.layout">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="236" source="d3.layout.treemap" target="d3.layout.hierarchy">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="237" source="d3.time.month" target="d3.time.month">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="238" source="d3.time.month" target="d3.time.day">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="239" source="d3.time.month" target="d3.time.interval">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="240" source="d3.time.month" target="d3.time">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="241" source="d3.scale.bilinear" target="d3.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="242" source="d3.layout.hierarchy" target="d3.layout">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="243" source="d3.layout.hierarchy" target="d3.rebind">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="244" source="d3.layout.hierarchy" target="d3.merge">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="245" source="d3.array" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="246" source="d3.ns" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="247" source="d3.time" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="248" source="d3.geo.albers" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="249" source="d3.geo.albers" target="d3.geo.projection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="250" source="d3.layout.chord" target="d3.layout">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="251" source="d3.layout.chord" target="d3.range">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="252" source="d3.geo.clip.antimeridian" target="d3.geo.clip">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="253" source="d3.compat.style" target="d3.compat">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="254" source="d3.selection.sort" target="d3.ascending">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="255" source="d3.selection.sort" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="256" source="d3.class" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="257" source="d3.time.week" target="d3.time.year">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="258" source="d3.time.week" target="d3.time.day">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="259" source="d3.time.week" target="d3.time.interval">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="260" source="d3.time.week" target="d3.time.week">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="261" source="d3.time.week" target="d3.time">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="262" source="d3.selection.remove" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="263" source="d3.selection.property" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="264" source="d3.transition.select" target="d3.selection.select">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="265" source="d3.transition.select" target="d3.transition">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="266" source="d3.geo.azimuthal.equal.area" target="d3.geo.azimuthal">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="267" source="d3.geo.azimuthal.equal.area" target="d3.geo">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="268" source="d3.geo.azimuthal.equal.area" target="d3.geo.projection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="269" source="d3.geo.azimuthal.equal.area" target="d3.geo.azimuthal.equal">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="270" source="d3.scale.quantile" target="d3.bisect">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="271" source="d3.scale.quantile" target="d3.ascending">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="272" source="d3.scale.quantile" target="d3.quantile">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="273" source="d3.scale.quantile" target="d3.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="274" source="d3.interpolate" target="d3.interpolate">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="275" source="d3.interpolate" target="d3.transform">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="276" source="d3.interpolate" target="d3.hsl">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="277" source="d3.interpolate" target="d3.rgb">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="278" source="d3.interpolate" target="d3.hcl">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="279" source="d3.interpolate" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="280" source="d3.interpolate" target="d3.lab">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="281" source="d3.geo.stream" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="282" source="d3.scale" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="283" source="d3.timer" target="d3.timer">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="284" source="d3.timer" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="285" source="d3.shuffle" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="286" source="d3.geo.cartesian" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="287" source="d3.svg.axis" target="d3.svg">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="288" source="d3.svg.axis" target="d3.scale">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="289" source="d3.svg.axis" target="d3.scale.linear">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="290" source="d3.svg.axis" target="d3.transition">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="291" source="d3.svg.axis" target="d3.selection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="292" source="d3.keys" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="293" source="d3.geo.path" target="d3.geo.resample">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="294" source="d3.geo.path" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="295" source="d3.geo.path" target="d3.geo.stream">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="296" source="d3.geo.path" target="d3.geo.bounds">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="297" source="d3.geo.path" target="d3.geo.path.context">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="298" source="d3.geo.circle" target="d3.geo.spherical">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="299" source="d3.geo.circle" target="d3.geo.cartesian">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="300" source="d3.geo.circle" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="301" source="d3.geo.circle" target="d3.geo.rotation">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="302" source="d3.geo.haversin" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="303" source="d3.requote" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="304" source="d3.functor" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="305" source="d3.layout.force" target="d3.behavior.drag">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="306" source="d3.layout.force" target="d3.layout">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="307" source="d3.layout.force" target="d3.event">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="308" source="d3.layout.force" target="d3.timer">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="309" source="d3.layout.force" target="d3.dispatch">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="310" source="d3.layout.force" target="d3.rebind">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="311" source="d3.layout.force" target="d3.geom.quadtree">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="312" source="d3.svg.line" target="d3.svg">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="313" source="d3.svg.line" target="d3.functor">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="314" source="d3.svg.line" target="d3.map">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="315" source="d3.svg.diagonal.radial" target="d3.svg.diagonal">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="316" source="d3.geo.spherical" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="317" source="d3.geom.delaunay" target="d3.geom.voronoi">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="318" source="d3.geom.delaunay" target="d3.geom">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="319" source="d3.merge" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="320" source="d3.time.format.iso" target="d3.time.format">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="321" source="d3.time.format.iso" target="d3.time.format.utc">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="322" source="d3.scale.ordinal" target="d3.range">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="323" source="d3.scale.ordinal" target="d3.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="324" source="d3.time.format.utc" target="d3.time.format">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="325" source="d3.geom.hull" target="d3.geom">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="326" source="d3.format.locale" target="d3.format">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="327" source="d3.svg.chord" target="d3.svg">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="328" source="d3.svg.chord" target="d3.functor">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="329" source="d3.mouse" target="d3.event">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="330" source="d3.mouse" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="331" source="d3.mouse" target="d3.selection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="332" source="d3.transition.ease" target="d3.selection.each">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="333" source="d3.transition.ease" target="d3.ease">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="334" source="d3.transition.ease" target="d3.transition">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="335" source="d3.permute" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="336" source="d3.svg.symbol" target="d3.svg">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="337" source="d3.svg.symbol" target="d3.functor">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="338" source="d3.svg.symbol" target="d3.map">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="339" source="d3.selection.insert" target="d3.ns">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="340" source="d3.selection.insert" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="341" source="d3.rgb" target="d3.map">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="342" source="d3.rgb" target="d3.hsl">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="343" source="d3.rgb" target="d3.xyz">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="344" source="d3.rgb" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="345" source="d3.rgb" target="d3.lab">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="346" source="d3.rebind" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="347" source="d3.json" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="348" source="d3.json" target="d3.xhr">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="349" source="d3.true" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="350" source="d3.median" target="d3.ascending">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="351" source="d3.median" target="d3.quantile">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="352" source="d3.median" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="353" source="d3.geo.graticule" target="d3.range">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="354" source="d3.geo.graticule" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="355" source="d3.scale.quantize" target="d3.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="356" source="d3.text" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="357" source="d3.text" target="d3.xhr">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="358" source="d3.svg.arc" target="d3.svg">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="359" source="d3.svg.arc" target="d3.functor">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="360" source="d3.geo.greatArc" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="361" source="d3.geo.greatArc" target="d3.geo.interpolate">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="362" source="d3.scale.sqrt" target="d3.scale.pow">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="363" source="d3.scale.sqrt" target="d3.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="364" source="d3.svg.line.radial" target="d3.svg.line">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="365" source="d3.values" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="366" source="d3.selection.empty" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="367" source="d3.geo.stereographic" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="368" source="d3.geo.stereographic" target="d3.geo.projection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="369" source="d3.geo.stereographic" target="d3.geo.azimuthal">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="370" source="d3.scale.category" target="d3.scale.ordinal">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="371" source="d3.scale.category" target="d3.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="372" source="d3.selection.order" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="373" source="d3.behavior" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="374" source="d3.entries" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="375" source="d3.svg.brush" target="d3.touches">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="376" source="d3.svg.brush" target="d3.selection">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="377" source="d3.svg.brush" target="d3.mouse">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="378" source="d3.svg.brush" target="d3.event">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="379" source="d3.svg.brush" target="d3.scale">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="380" source="d3.svg.brush" target="d3.rebind">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="381" source="d3.svg.brush" target="d3.svg">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="382" source="d3.geo.albers.usa" target="d3.geo.albers">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="383" source="d3.geo.albers.usa" target="d3.geo">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="384" source="d3.selection.datum" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="385" source="d3.event" target="d3.event">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="386" source="d3.event" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="387" source="d3.event" target="d3.dispatch">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="388" source="d3.selection.call" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="389" source="d3.color" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="390" source="d3.geom.polygon" target="d3.geom">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="391" source="d3.lab" target="d3.xyz">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="392" source="d3.lab" target="d3.hcl">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="393" source="d3.lab" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="394" source="d3.lab" target="d3.rgb">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="395" source="d3.geo.interpolate" target="d3.geo">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="396" source="d3.geo.interpolate" target="d3.geo.haversin">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="397" source="d3.scale.polylinear" target="d3.bisect">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="398" source="d3.scale.polylinear" target="d3.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="399" source="d3.time.hour" target="d3.time.hour">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="400" source="d3.time.hour" target="d3.time.interval">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="401" source="d3.time.hour" target="d3.time">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="402" source="d3.scale.threshold" target="d3.bisect">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="403" source="d3.scale.threshold" target="d3.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="404" source="d3.selection.style" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="405" source="d3.geom.voronoi" target="d3.geom.polygon">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="406" source="d3.geom.voronoi" target="d3.range">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="407" source="d3.geom.voronoi" target="d3.geom">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="408" source="d3.layout.tree" target="d3.layout">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="409" source="d3.layout.tree" target="d3.layout.hierarchy">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="410" source="d3.transition.text" target="d3.transition.tween">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="411" source="d3.transition.text" target="d3.transition">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="412" source="d3.selection.append" target="d3.ns">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="413" source="d3.selection.append" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="414" source="d3.geo.path.buffer" target="d3.geo.path">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="415" source="d3.selection.transition" target="d3.transition">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="416" source="d3.selection.transition" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="417" source="d3.selection.filter" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="418" source="d3.scale.pow" target="d3.scale.linear">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="419" source="d3.scale.pow" target="d3.scale.nice">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="420" source="d3.scale.pow" target="d3.scale">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="421" source="d3.selection.selectAll" target="d3.selection">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="422" source="d3.geom" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="423" source="d3.xhr" target="d3.rebind">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="424" source="d3.xhr" target="d3.event">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
<edge id="425" source="d3.xhr" target="d3">
<attvalues>
<attvalue for="0" value="True" />
</attvalues>
</edge>
<edge id="426" source="d3.xhr" target="d3.dispatch">
<attvalues>
<attvalue for="0" value="False" />
</attvalues>
</edge>
</edges>
</graph>
</gexf>
from glob import glob
import re
d3_mod = re.compile('(d3(?:\.[a-zA-Z]+)+)')
d3_func_def = re.compile('function +(d3(?:_[a-zA-Z]+)+)')
d3_func_call = re.compile('(?!function +)(d3(?:_[a-zA-Z]+)+) *\(')
modules = {}
alias = {
'd3.select': 'd3.selection.root',
'd3.selectAll': 'd3.selection.root',
'd3.tsv': 'd3.dsv.tsv',
'd3.csv': 'd3.dsv.csv',
'd3.interpolateArray': 'd3.interpolate',
'd3.interpolateNumber': 'd3.interpolate',
'd3.interpolateRgb': 'd3.interpolate',
'd3.interpolateString': 'd3.interpolate',
'd3.interpolateObject': 'd3.interpolate',
'd3.interpolators': 'd3.interpolate',
'd3.interpolateTransform': 'd3.interpolate',
'd3.interpolateHcl': 'd3.interpolate',
'd3.interpolateLab': 'd3.interpolate',
'd3.interpolateHsl': 'd3.interpolate',
'd3.interpolateRound': 'd3.interpolate',
'd3.bisector': 'd3.bisect',
'd3.bisectLeft': 'd3.bisect',
'd3.bisectRight': 'd3.bisect',
'd3.time.months': 'd3.time.month',
'd3.time.month.utc': 'd3.time.month',
'd3.time.minutes': 'd3.time.minute',
'd3.time.minute.utc': 'd3.time.minute',
'd3.time.seconds': 'd3.time.second',
'd3.time.second.utc': 'd3.time.second',
'd3.time.hours': 'd3.time.hour',
'd3.time.hour.utc': 'd3.time.hour',
'd3.time.days': 'd3.time.day',
'd3.time.day.utc': 'd3.time.day',
'd3.time.years': 'd3.time.year',
'd3.time.year.utc': 'd3.time.year',
'd3.time.sunday': 'd3.time.week',
'd3.time.sunday.utc': 'd3.time.week',
'd3.time.weeks': 'd3.time.week',
'd3.time.weeks.utc': 'd3.time.week',
'd3.time.weekOfYear': 'd3.time.week',
}
d3_is_mod = re.compile('d3(?:\.[a-zA-Z]+)*(\.[a-zA-Z]+)\\1')
for f in glob('src/*/*.js'):
src = open(f).read()
cl = 'd3.%s' % f[4:-3].replace('core/', '').replace('-', '.').replace('/', '.')
if d3_is_mod.match(cl):
cl = cl[:cl.rfind('.')]
if cl == "d3.core":
cl = "d3"
module = modules[cl] = dict(defines=[], uses=[], depends=[], calls=[], len=len(src))
# at least a module is dependend on its own namespace
parts = cl.split('.')
if len(parts) > 1:
module['depends'].append('.'.join(parts[:-1]))
for mod in d3_mod.findall(src):
if mod != cl:
module['uses'].append(mod)
for func in d3_func_def.findall(src):
module['defines'].append(func)
for func in d3_func_call.findall(src):
if func not in module['defines']:
module['calls'].append(func)
for m in modules:
mod = modules[m]
for need in mod['uses']:
if not need in modules:
if need in alias:
need = alias[need]
parent = need[:need.rfind('.')]
if parent in modules:
need = parent
elif parent in alias and alias[parent] in modules:
need = alias[parent]
if need not in modules:
print 'missing', need
continue
mod['depends'].append(need)
for func in mod['calls']:
# find mod who provides func
for m1 in modules:
if m1 != m:
if func in modules[m1]['defines'] and m1 not in mod['depends']:
mod['depends'].append(m1)
# save as JSON
import json
open('deps.json', 'w').write(json.dumps(modules, sort_keys=True, indent=4, separators=(',', ': ')))
# save as GEXF
import networkx as nx
G = nx.DiGraph()
for m in modules:
G.add_node(m)
for m in modules:
for m2 in modules[m]['depends']:
G.add_edge(m, m2, tree=modules[m]['depends'][0] == m2)
nx.write_gexf(G, "d3-dependencies.gexf")
from networkx.readwrite import json_graph
data = json_graph.node_link_data(G)
open('d3-deps.graph.json', 'w').write(json.dumps(data, indent=2, separators=(',', ': ')))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment