geosolver/doc/pydoc/geosolver.graph.html

296 lines
24 KiB
HTML

<!doctype html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: module geosolver.graph</title>
</head><body bgcolor="#f0f0f8">
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong><a href="geosolver.html"><font color="#ffffff">geosolver</font></a>.graph</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:/home/rick/Programming/Python/GeoSolver/geosolver/graph.py">/home/rick/Programming/Python/GeoSolver/geosolver/graph.py</a></font></td></tr></table>
<p><tt><a href="#Graph">Graph</a>&nbsp;data&nbsp;structures&nbsp;and&nbsp;algorithms.&nbsp;<br>
After&nbsp;Guido&nbsp;van&nbsp;Rossums&nbsp;essay&nbsp;on&nbsp;graphs&nbsp;in&nbsp;python<br>
(<a href="http://www.python.org/doc/essays/graphs.html">http://www.python.org/doc/essays/graphs.html</a>).<br>
and&nbsp;Julien&nbsp;Burdy's&nbsp;sourceforge&nbsp;python&nbsp;graph&nbsp;project.&nbsp;&nbsp;<br>
(<a href="http://sourceforge.net/projects/pygraphlib/">http://sourceforge.net/projects/pygraphlib/</a>)<br>
&nbsp;<br>
A&nbsp;graph&nbsp;is&nbsp;typically&nbsp;represented&nbsp;as&nbsp;G=(V,E)&nbsp;where<br>
V&nbsp;are&nbsp;vertices&nbsp;and&nbsp;E&nbsp;are&nbsp;edges.&nbsp;<br>
All&nbsp;vertices&nbsp;in&nbsp;a&nbsp;graph&nbsp;are&nbsp;uniquely,&nbsp;i.e.&nbsp;have&nbsp;unique&nbsp;id's.&nbsp;<br>
Edges&nbsp;are&nbsp;directed&nbsp;edges&nbsp;and&nbsp;are&nbsp;identified&nbsp;by&nbsp;an&nbsp;ordered&nbsp;<br>
pair&nbsp;of&nbsp;vertices&nbsp;(v1,v2).&nbsp;All&nbsp;edges&nbsp;are&nbsp;unique,&nbsp;i.e.&nbsp;are&nbsp;unique&nbsp;ordered&nbsp;pairs.&nbsp;<br>
Associated&nbsp;with&nbsp;each&nbsp;edge&nbsp;is&nbsp;a&nbsp;value.<br>
&nbsp;<br>
A&nbsp;graph&nbsp;is&nbsp;implemented&nbsp;as&nbsp;a&nbsp;dictionary&nbsp;of&nbsp;which&nbsp;the&nbsp;keys&nbsp;are&nbsp;vertices.&nbsp;&nbsp;<br>
Associated&nbsp;with&nbsp;each&nbsp;vertex&nbsp;is&nbsp;(again)&nbsp;a&nbsp;dictionairy&nbsp;of&nbsp;which&nbsp;the&nbsp;keys&nbsp;are&nbsp;<br>
the&nbsp;vertices&nbsp;to&nbsp;which&nbsp;there&nbsp;is&nbsp;an&nbsp;edge.&nbsp;Associated&nbsp;with&nbsp;each&nbsp;edge&nbsp;is&nbsp;a&nbsp;value.&nbsp;<br>
(A&nbsp;graph&nbsp;is&nbsp;implemented&nbsp;as&nbsp;a&nbsp;dictionairy&nbsp;of&nbsp;dictionairies).&nbsp;<br>
&nbsp;<br>
The&nbsp;add_*&nbsp;and&nbsp;rem_*&nbsp;methods&nbsp;ensure&nbsp;that&nbsp;the&nbsp;graph&nbsp;contains&nbsp;no&nbsp;edges<br>
to&nbsp;vertices&nbsp;that&nbsp;are&nbsp;not&nbsp;in&nbsp;main&nbsp;dictionary&nbsp;(anymore).&nbsp;<br>
&nbsp;<br>
The&nbsp;reverse&nbsp;of&nbsp;the&nbsp;graph&nbsp;is&nbsp;also&nbsp;sored&nbsp;and&nbsp;kept&nbsp;up&nbsp;to&nbsp;date,&nbsp;for&nbsp;fast<br>
determination&nbsp;of&nbsp;incoming&nbsp;edges&nbsp;and&nbsp;other&nbsp;algorithms.<br>
&nbsp;<br>
Also&nbsp;dictionaries&nbsp;are&nbsp;kept&nbsp;mapping&nbsp;vertices&nbsp;to&nbsp;fan-in&nbsp;and&nbsp;fanout&nbsp;numbers,&nbsp;and<br>
mapping&nbsp;numbers&nbsp;to&nbsp;vertices&nbsp;with&nbsp;that&nbsp;fan-in/out&nbsp;number.&nbsp;This&nbsp;allows&nbsp;us&nbsp;to&nbsp;<br>
quickly&nbsp;find&nbsp;sources,&nbsp;sinks,&nbsp;etc.<br>
&nbsp;<br>
Copyright&nbsp;Rick&nbsp;van&nbsp;der&nbsp;Meiden&nbsp;-&nbsp;2003,&nbsp;2004,&nbsp;2005</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#aa55cc">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#fffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="random.html">random</a><br>
</td><td width="25%" valign=top></td><td width="25%" valign=top></td><td width="25%" valign=top></td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="geosolver.notify.html#Notifier">geosolver.notify.Notifier</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="geosolver.graph.html#Graph">Graph</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="geosolver.graph.html#FanGraph">FanGraph</a>
</font></dt></dl>
</dd>
</dl>
</dd>
</dl>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="FanGraph">class <strong>FanGraph</strong></a>(<a href="geosolver.graph.html#Graph">Graph</a>)</font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan=2><tt>A&nbsp;graph&nbsp;with&nbsp;updated&nbsp;fan-in&nbsp;and&nbsp;fan-out&nbsp;numbers<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%"><dl><dt>Method resolution order:</dt>
<dd><a href="geosolver.graph.html#FanGraph">FanGraph</a></dd>
<dd><a href="geosolver.graph.html#Graph">Graph</a></dd>
<dd><a href="geosolver.notify.html#Notifier">geosolver.notify.Notifier</a></dd>
</dl>
<hr>
Methods defined here:<br>
<dl><dt><a name="FanGraph-__init__"><strong>__init__</strong></a>(self, graph<font color="#909090">=None</font>)</dt></dl>
<dl><dt><a name="FanGraph-add_edge"><strong>add_edge</strong></a>(self, v1, v2, value<font color="#909090">=1</font>)</dt><dd><tt>Add&nbsp;edge&nbsp;from&nbsp;v1&nbsp;to&nbsp;v2&nbsp;with&nbsp;optional&nbsp;value.</tt></dd></dl>
<dl><dt><a name="FanGraph-add_vertex"><strong>add_vertex</strong></a>(self, v)</dt><dd><tt>Add&nbsp;vertex&nbsp;to&nbsp;graph&nbsp;if&nbsp;not&nbsp;already.</tt></dd></dl>
<dl><dt><a name="FanGraph-fanin"><strong>fanin</strong></a>(self, v)</dt><dd><tt>return&nbsp;fan-in&nbsp;number&nbsp;(number&nbsp;of&nbsp;in-going&nbsp;edges)</tt></dd></dl>
<dl><dt><a name="FanGraph-fanin_numbers"><strong>fanin_numbers</strong></a>(self)</dt><dd><tt>the&nbsp;set&nbsp;of&nbsp;fan-in&nbsp;numbers,&nbsp;<br>
i.e.&nbsp;the&nbsp;union&nbsp;of&nbsp;the&nbsp;fan-in&nbsp;numbers&nbsp;of&nbsp;all&nbsp;veretices</tt></dd></dl>
<dl><dt><a name="FanGraph-fanout"><strong>fanout</strong></a>(self, v)</dt><dd><tt>return&nbsp;fan-out&nbsp;number&nbsp;(number&nbsp;of&nbsp;out-going&nbsp;edges)</tt></dd></dl>
<dl><dt><a name="FanGraph-fanout_numbers"><strong>fanout_numbers</strong></a>(self)</dt><dd><tt>the&nbsp;set&nbsp;of&nbsp;fan-out&nbsp;numbers,&nbsp;<br>
i.e.&nbsp;the&nbsp;union&nbsp;of&nbsp;the&nbsp;fan-out&nbsp;numbers&nbsp;of&nbsp;all&nbsp;veretices</tt></dd></dl>
<dl><dt><a name="FanGraph-infan"><strong>infan</strong></a>(self, number)</dt><dd><tt>return&nbsp;a&nbsp;list&nbsp;of&nbsp;vertices&nbsp;with&nbsp;given&nbsp;fan-in&nbsp;number</tt></dd></dl>
<dl><dt><a name="FanGraph-leafs"><strong>leafs</strong></a>(self)</dt><dd><tt>return&nbsp;a&nbsp;list&nbsp;of&nbsp;vertices&nbsp;with&nbsp;zero&nbsp;fan-out</tt></dd></dl>
<dl><dt><a name="FanGraph-outfan"><strong>outfan</strong></a>(self, number)</dt><dd><tt>return&nbsp;a&nbsp;list&nbsp;of&nbsp;vertices&nbsp;with&nbsp;given&nbsp;fan-out&nbsp;number</tt></dd></dl>
<dl><dt><a name="FanGraph-rem_edge"><strong>rem_edge</strong></a>(self, v1, v2)</dt><dd><tt>Remove&nbsp;edge.</tt></dd></dl>
<dl><dt><a name="FanGraph-rem_vertex"><strong>rem_vertex</strong></a>(self, v)</dt><dd><tt>Remove&nbsp;vertex&nbsp;and&nbsp;incident&nbsp;edges.</tt></dd></dl>
<dl><dt><a name="FanGraph-roots"><strong>roots</strong></a>(self)</dt><dd><tt>return&nbsp;a&nbsp;list&nbsp;of&nbsp;vertices&nbsp;with&nbsp;zero&nbsp;fan-in</tt></dd></dl>
<dl><dt><a name="FanGraph-singular"><strong>singular</strong></a>(self, number)</dt><dd><tt>return&nbsp;a&nbsp;list&nbsp;of&nbsp;vertices&nbsp;with&nbsp;no&nbsp;fan-in&nbsp;and&nbsp;no&nbsp;fan-out</tt></dd></dl>
<dl><dt><a name="FanGraph-subgraph"><strong>subgraph</strong></a>(self, vertices)</dt><dd><tt>Derive&nbsp;subgraph&nbsp;containing&nbsp;specified&nbsp;vertices&nbsp;and&nbsp;enclosed&nbsp;edges.</tt></dd></dl>
<hr>
Methods inherited from <a href="geosolver.graph.html#Graph">Graph</a>:<br>
<dl><dt><a name="FanGraph-__str__"><strong>__str__</strong></a>(self)</dt><dd><tt>Create&nbsp;a&nbsp;string&nbsp;representation,&nbsp;using&nbsp;str()&nbsp;for&nbsp;each&nbsp;element</tt></dd></dl>
<dl><dt><a name="FanGraph-add_bi"><strong>add_bi</strong></a>(self, v1, v2, value<font color="#909090">=1</font>)</dt><dd><tt>Add&nbsp;edges&nbsp;bi-directinally&nbsp;with&nbsp;optional&nbsp;value.</tt></dd></dl>
<dl><dt><a name="FanGraph-add_graph"><strong>add_graph</strong></a>(self, graph)</dt><dd><tt>Add&nbsp;all&nbsp;vertices&nbsp;and&nbsp;edges&nbsp;of&nbsp;given&nbsp;graph,&nbsp;and&nbsp;set&nbsp;edge&nbsp;values&nbsp;from&nbsp;given&nbsp;graph&nbsp;too.</tt></dd></dl>
<dl><dt><a name="FanGraph-adjacent_edges"><strong>adjacent_edges</strong></a>(self, vertex)</dt><dd><tt>return&nbsp;list&nbsp;of&nbsp;outgoing&nbsp;and&nbsp;outgoing&nbsp;edges</tt></dd></dl>
<dl><dt><a name="FanGraph-adjacent_vertices"><strong>adjacent_vertices</strong></a>(self, v)</dt><dd><tt>list&nbsp;of&nbsp;adjacent&nbsp;(ingoing&nbsp;or&nbsp;outgoing)&nbsp;vertices</tt></dd></dl>
<dl><dt><a name="FanGraph-connected"><strong>connected</strong></a>(self, v)</dt><dd><tt>return&nbsp;vertices&nbsp;X&nbsp;connected&nbsp;to&nbsp;v&nbsp;by&nbsp;following&nbsp;edges&nbsp;ajdajecnt&nbsp;to&nbsp;v&nbsp;or&nbsp;X<br>
(v&nbsp;is&nbsp;not&nbsp;in&nbsp;the&nbsp;result)</tt></dd></dl>
<dl><dt><a name="FanGraph-connected_ingoing"><strong>connected_ingoing</strong></a>(self, v)</dt><dd><tt>return&nbsp;vertices&nbsp;X&nbsp;connected&nbsp;to&nbsp;v&nbsp;by&nbsp;following&nbsp;only&nbsp;ingoing&nbsp;edges&nbsp;to&nbsp;v&nbsp;or&nbsp;X&nbsp;(v&nbsp;is&nbsp;not&nbsp;in&nbsp;the&nbsp;result)</tt></dd></dl>
<dl><dt><a name="FanGraph-connected_outgoing"><strong>connected_outgoing</strong></a>(self, v)</dt><dd><tt>return&nbsp;vertices&nbsp;X&nbsp;connected&nbsp;from&nbsp;v&nbsp;by&nbsp;following&nbsp;only&nbsp;outgoing&nbsp;edges&nbsp;from&nbsp;v&nbsp;or&nbsp;X&nbsp;<br>
(v&nbsp;is&nbsp;not&nbsp;in&nbsp;the&nbsp;result)</tt></dd></dl>
<dl><dt><a name="FanGraph-connected_subsets"><strong>connected_subsets</strong></a>(self)</dt><dd><tt>returns&nbsp;a&nbsp;set&nbsp;of&nbsp;(undirectionally)&nbsp;connected&nbsp;subsets&nbsp;of&nbsp;vertices</tt></dd></dl>
<dl><dt><a name="FanGraph-copy"><strong>copy</strong></a>(self)</dt></dl>
<dl><dt><a name="FanGraph-edges"><strong>edges</strong></a>(self)</dt><dd><tt>List&nbsp;edges</tt></dd></dl>
<dl><dt><a name="FanGraph-get"><strong>get</strong></a>(self, v1, v2)</dt><dd><tt>Get&nbsp;value&nbsp;of&nbsp;edge&nbsp;(v1,v2).</tt></dd></dl>
<dl><dt><a name="FanGraph-has_bi"><strong>has_bi</strong></a>(self, v1, v2)</dt><dd><tt>True&nbsp;if&nbsp;both&nbsp;edges&nbsp;(v1,v2)&nbsp;and&nbsp;(v2,v1)&nbsp;are&nbsp;in&nbsp;this&nbsp;graph.</tt></dd></dl>
<dl><dt><a name="FanGraph-has_edge"><strong>has_edge</strong></a>(self, v1, v2)</dt><dd><tt>True&nbsp;if&nbsp;there&nbsp;is&nbsp;a&nbsp;directed&nbsp;edge&nbsp;(v1,v2)&nbsp;in&nbsp;this&nbsp;graph.</tt></dd></dl>
<dl><dt><a name="FanGraph-has_one"><strong>has_one</strong></a>(self, v1, v2)</dt><dd><tt>True&nbsp;if&nbsp;either&nbsp;edge&nbsp;(v1,v2)&nbsp;or&nbsp;(v2,v1)&nbsp;is&nbsp;in&nbsp;this&nbsp;graph.</tt></dd></dl>
<dl><dt><a name="FanGraph-has_vertex"><strong>has_vertex</strong></a>(self, v)</dt><dd><tt>True&nbsp;if&nbsp;v&nbsp;a&nbsp;vertex&nbsp;of&nbsp;this&nbsp;graph.</tt></dd></dl>
<dl><dt><a name="FanGraph-ingoing_edges"><strong>ingoing_edges</strong></a>(self, vertex)</dt><dd><tt>return&nbsp;list&nbsp;of&nbsp;incoming&nbsp;edges</tt></dd></dl>
<dl><dt><a name="FanGraph-ingoing_vertices"><strong>ingoing_vertices</strong></a>(self, vertex)</dt><dd><tt>return&nbsp;list&nbsp;of&nbsp;vertices&nbsp;from&nbsp;which&nbsp;edge&nbsp;goes&nbsp;to&nbsp;given&nbsp;vertex</tt></dd></dl>
<dl><dt><a name="FanGraph-mincut"><strong>mincut</strong></a>(self)</dt><dd><tt>Returns&nbsp;a&nbsp;minimum&nbsp;cut&nbsp;of&nbsp;the&nbsp;graph.&nbsp;<br>
Implements&nbsp;the&nbsp;Stoer/Wagner&nbsp;algorithm.&nbsp;The&nbsp;graph&nbsp;is&nbsp;interpreted&nbsp;<br>
as&nbsp;a&nbsp;undirected&nbsp;graph,&nbsp;by&nbsp;adding&nbsp;the&nbsp;weights&nbsp;of&nbsp;co-edges.&nbsp;<br>
Returns&nbsp;(value,&nbsp;edges,&nbsp;g1,&nbsp;g2)&nbsp;<br>
where&nbsp;value&nbsp;is&nbsp;the&nbsp;weight&nbsp;of&nbsp;the&nbsp;cut,&nbsp;<br>
edges&nbsp;is&nbsp;the&nbsp;set&nbsp;of&nbsp;cut&nbsp;edges,&nbsp;<br>
g1&nbsp;and&nbsp;g2&nbsp;are&nbsp;disjoint&nbsp;sets&nbsp;of&nbsp;vertices.</tt></dd></dl>
<dl><dt><a name="FanGraph-outgoing_edges"><strong>outgoing_edges</strong></a>(self, vertex)</dt><dd><tt>return&nbsp;list&nbsp;of&nbsp;outgoing&nbsp;edges</tt></dd></dl>
<dl><dt><a name="FanGraph-outgoing_vertices"><strong>outgoing_vertices</strong></a>(self, vertex)</dt><dd><tt>return&nbsp;list&nbsp;of&nbsp;vertices&nbsp;to&nbsp;which&nbsp;edge&nbsp;goes&nbsp;from&nbsp;given&nbsp;vertex</tt></dd></dl>
<dl><dt><a name="FanGraph-path"><strong>path</strong></a>(self, start, end)</dt><dd><tt>return&nbsp;an&nbsp;arbitrary&nbsp;path&nbsp;(list&nbsp;of&nbsp;vertices)&nbsp;from&nbsp;start&nbsp;to&nbsp;end.&nbsp;<br>
If&nbsp;start&nbsp;equal&nbsp;to&nbsp;end,&nbsp;then&nbsp;return&nbsp;a&nbsp;cycle.&nbsp;<br>
If&nbsp;no&nbsp;path,&nbsp;then&nbsp;return&nbsp;empty&nbsp;list.</tt></dd></dl>
<dl><dt><a name="FanGraph-rem_bi"><strong>rem_bi</strong></a>(self, v1, v2)</dt><dd><tt>Remove&nbsp;edges&nbsp;bi-directionally.</tt></dd></dl>
<dl><dt><a name="FanGraph-reverse"><strong>reverse</strong></a>(self)</dt><dd><tt>return&nbsp;a&nbsp;reverse&nbsp;graph</tt></dd></dl>
<dl><dt><a name="FanGraph-set"><strong>set</strong></a>(self, v1, v2, value)</dt><dd><tt>Set&nbsp;value&nbsp;of&nbsp;edge&nbsp;(v1,v2)&nbsp;and&nbsp;add&nbsp;edge&nbsp;if&nbsp;it&nbsp;doesn't&nbsp;exist</tt></dd></dl>
<dl><dt><a name="FanGraph-set_bi"><strong>set_bi</strong></a>(self, v1, v2, value)</dt><dd><tt>Set&nbsp;value&nbsp;of&nbsp;edges&nbsp;(v1,v2)&nbsp;and&nbsp;(v2,v1).</tt></dd></dl>
<dl><dt><a name="FanGraph-vertices"><strong>vertices</strong></a>(self)</dt><dd><tt>List&nbsp;vertices</tt></dd></dl>
<hr>
Methods inherited from <a href="geosolver.notify.html#Notifier">geosolver.notify.Notifier</a>:<br>
<dl><dt><a name="FanGraph-add_listener"><strong>add_listener</strong></a>(self, listener)</dt><dd><tt>add&nbsp;a&nbsp;listener&nbsp;to&nbsp;the&nbsp;list&nbsp;(and&nbsp;self&nbsp;to&nbsp;listers'&nbsp;list)</tt></dd></dl>
<dl><dt><a name="FanGraph-rem_listener"><strong>rem_listener</strong></a>(self, listener)</dt><dd><tt>remove&nbsp;a&nbsp;listener&nbsp;from&nbsp;the&nbsp;list&nbsp;(and&nbsp;self&nbsp;from&nbsp;listers'&nbsp;list)</tt></dd></dl>
<dl><dt><a name="FanGraph-send_notify"><strong>send_notify</strong></a>(self, message)</dt><dd><tt>send&nbsp;a&nbsp;message&nbsp;to&nbsp;all&nbsp;listeners</tt></dd></dl>
</td></tr></table> <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="Graph">class <strong>Graph</strong></a>(<a href="geosolver.notify.html#Notifier">geosolver.notify.Notifier</a>)</font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan=2><tt>A&nbsp;weighted&nbsp;directed&nbsp;graph<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="Graph-__init__"><strong>__init__</strong></a>(self, graph<font color="#909090">=None</font>)</dt></dl>
<dl><dt><a name="Graph-__str__"><strong>__str__</strong></a>(self)</dt><dd><tt>Create&nbsp;a&nbsp;string&nbsp;representation,&nbsp;using&nbsp;str()&nbsp;for&nbsp;each&nbsp;element</tt></dd></dl>
<dl><dt><a name="Graph-add_bi"><strong>add_bi</strong></a>(self, v1, v2, value<font color="#909090">=1</font>)</dt><dd><tt>Add&nbsp;edges&nbsp;bi-directinally&nbsp;with&nbsp;optional&nbsp;value.</tt></dd></dl>
<dl><dt><a name="Graph-add_edge"><strong>add_edge</strong></a>(self, v1, v2, value<font color="#909090">=1</font>)</dt><dd><tt>Add&nbsp;edge&nbsp;from&nbsp;v1&nbsp;to&nbsp;v2&nbsp;with&nbsp;optional&nbsp;value.</tt></dd></dl>
<dl><dt><a name="Graph-add_graph"><strong>add_graph</strong></a>(self, graph)</dt><dd><tt>Add&nbsp;all&nbsp;vertices&nbsp;and&nbsp;edges&nbsp;of&nbsp;given&nbsp;graph,&nbsp;and&nbsp;set&nbsp;edge&nbsp;values&nbsp;from&nbsp;given&nbsp;graph&nbsp;too.</tt></dd></dl>
<dl><dt><a name="Graph-add_vertex"><strong>add_vertex</strong></a>(self, v)</dt><dd><tt>Add&nbsp;vertex&nbsp;to&nbsp;graph&nbsp;if&nbsp;not&nbsp;already.</tt></dd></dl>
<dl><dt><a name="Graph-adjacent_edges"><strong>adjacent_edges</strong></a>(self, vertex)</dt><dd><tt>return&nbsp;list&nbsp;of&nbsp;outgoing&nbsp;and&nbsp;outgoing&nbsp;edges</tt></dd></dl>
<dl><dt><a name="Graph-adjacent_vertices"><strong>adjacent_vertices</strong></a>(self, v)</dt><dd><tt>list&nbsp;of&nbsp;adjacent&nbsp;(ingoing&nbsp;or&nbsp;outgoing)&nbsp;vertices</tt></dd></dl>
<dl><dt><a name="Graph-connected"><strong>connected</strong></a>(self, v)</dt><dd><tt>return&nbsp;vertices&nbsp;X&nbsp;connected&nbsp;to&nbsp;v&nbsp;by&nbsp;following&nbsp;edges&nbsp;ajdajecnt&nbsp;to&nbsp;v&nbsp;or&nbsp;X<br>
(v&nbsp;is&nbsp;not&nbsp;in&nbsp;the&nbsp;result)</tt></dd></dl>
<dl><dt><a name="Graph-connected_ingoing"><strong>connected_ingoing</strong></a>(self, v)</dt><dd><tt>return&nbsp;vertices&nbsp;X&nbsp;connected&nbsp;to&nbsp;v&nbsp;by&nbsp;following&nbsp;only&nbsp;ingoing&nbsp;edges&nbsp;to&nbsp;v&nbsp;or&nbsp;X&nbsp;(v&nbsp;is&nbsp;not&nbsp;in&nbsp;the&nbsp;result)</tt></dd></dl>
<dl><dt><a name="Graph-connected_outgoing"><strong>connected_outgoing</strong></a>(self, v)</dt><dd><tt>return&nbsp;vertices&nbsp;X&nbsp;connected&nbsp;from&nbsp;v&nbsp;by&nbsp;following&nbsp;only&nbsp;outgoing&nbsp;edges&nbsp;from&nbsp;v&nbsp;or&nbsp;X&nbsp;<br>
(v&nbsp;is&nbsp;not&nbsp;in&nbsp;the&nbsp;result)</tt></dd></dl>
<dl><dt><a name="Graph-connected_subsets"><strong>connected_subsets</strong></a>(self)</dt><dd><tt>returns&nbsp;a&nbsp;set&nbsp;of&nbsp;(undirectionally)&nbsp;connected&nbsp;subsets&nbsp;of&nbsp;vertices</tt></dd></dl>
<dl><dt><a name="Graph-copy"><strong>copy</strong></a>(self)</dt></dl>
<dl><dt><a name="Graph-edges"><strong>edges</strong></a>(self)</dt><dd><tt>List&nbsp;edges</tt></dd></dl>
<dl><dt><a name="Graph-get"><strong>get</strong></a>(self, v1, v2)</dt><dd><tt>Get&nbsp;value&nbsp;of&nbsp;edge&nbsp;(v1,v2).</tt></dd></dl>
<dl><dt><a name="Graph-has_bi"><strong>has_bi</strong></a>(self, v1, v2)</dt><dd><tt>True&nbsp;if&nbsp;both&nbsp;edges&nbsp;(v1,v2)&nbsp;and&nbsp;(v2,v1)&nbsp;are&nbsp;in&nbsp;this&nbsp;graph.</tt></dd></dl>
<dl><dt><a name="Graph-has_edge"><strong>has_edge</strong></a>(self, v1, v2)</dt><dd><tt>True&nbsp;if&nbsp;there&nbsp;is&nbsp;a&nbsp;directed&nbsp;edge&nbsp;(v1,v2)&nbsp;in&nbsp;this&nbsp;graph.</tt></dd></dl>
<dl><dt><a name="Graph-has_one"><strong>has_one</strong></a>(self, v1, v2)</dt><dd><tt>True&nbsp;if&nbsp;either&nbsp;edge&nbsp;(v1,v2)&nbsp;or&nbsp;(v2,v1)&nbsp;is&nbsp;in&nbsp;this&nbsp;graph.</tt></dd></dl>
<dl><dt><a name="Graph-has_vertex"><strong>has_vertex</strong></a>(self, v)</dt><dd><tt>True&nbsp;if&nbsp;v&nbsp;a&nbsp;vertex&nbsp;of&nbsp;this&nbsp;graph.</tt></dd></dl>
<dl><dt><a name="Graph-ingoing_edges"><strong>ingoing_edges</strong></a>(self, vertex)</dt><dd><tt>return&nbsp;list&nbsp;of&nbsp;incoming&nbsp;edges</tt></dd></dl>
<dl><dt><a name="Graph-ingoing_vertices"><strong>ingoing_vertices</strong></a>(self, vertex)</dt><dd><tt>return&nbsp;list&nbsp;of&nbsp;vertices&nbsp;from&nbsp;which&nbsp;edge&nbsp;goes&nbsp;to&nbsp;given&nbsp;vertex</tt></dd></dl>
<dl><dt><a name="Graph-mincut"><strong>mincut</strong></a>(self)</dt><dd><tt>Returns&nbsp;a&nbsp;minimum&nbsp;cut&nbsp;of&nbsp;the&nbsp;graph.&nbsp;<br>
Implements&nbsp;the&nbsp;Stoer/Wagner&nbsp;algorithm.&nbsp;The&nbsp;graph&nbsp;is&nbsp;interpreted&nbsp;<br>
as&nbsp;a&nbsp;undirected&nbsp;graph,&nbsp;by&nbsp;adding&nbsp;the&nbsp;weights&nbsp;of&nbsp;co-edges.&nbsp;<br>
Returns&nbsp;(value,&nbsp;edges,&nbsp;g1,&nbsp;g2)&nbsp;<br>
where&nbsp;value&nbsp;is&nbsp;the&nbsp;weight&nbsp;of&nbsp;the&nbsp;cut,&nbsp;<br>
edges&nbsp;is&nbsp;the&nbsp;set&nbsp;of&nbsp;cut&nbsp;edges,&nbsp;<br>
g1&nbsp;and&nbsp;g2&nbsp;are&nbsp;disjoint&nbsp;sets&nbsp;of&nbsp;vertices.</tt></dd></dl>
<dl><dt><a name="Graph-outgoing_edges"><strong>outgoing_edges</strong></a>(self, vertex)</dt><dd><tt>return&nbsp;list&nbsp;of&nbsp;outgoing&nbsp;edges</tt></dd></dl>
<dl><dt><a name="Graph-outgoing_vertices"><strong>outgoing_vertices</strong></a>(self, vertex)</dt><dd><tt>return&nbsp;list&nbsp;of&nbsp;vertices&nbsp;to&nbsp;which&nbsp;edge&nbsp;goes&nbsp;from&nbsp;given&nbsp;vertex</tt></dd></dl>
<dl><dt><a name="Graph-path"><strong>path</strong></a>(self, start, end)</dt><dd><tt>return&nbsp;an&nbsp;arbitrary&nbsp;path&nbsp;(list&nbsp;of&nbsp;vertices)&nbsp;from&nbsp;start&nbsp;to&nbsp;end.&nbsp;<br>
If&nbsp;start&nbsp;equal&nbsp;to&nbsp;end,&nbsp;then&nbsp;return&nbsp;a&nbsp;cycle.&nbsp;<br>
If&nbsp;no&nbsp;path,&nbsp;then&nbsp;return&nbsp;empty&nbsp;list.</tt></dd></dl>
<dl><dt><a name="Graph-rem_bi"><strong>rem_bi</strong></a>(self, v1, v2)</dt><dd><tt>Remove&nbsp;edges&nbsp;bi-directionally.</tt></dd></dl>
<dl><dt><a name="Graph-rem_edge"><strong>rem_edge</strong></a>(self, v1, v2)</dt><dd><tt>Remove&nbsp;edge.</tt></dd></dl>
<dl><dt><a name="Graph-rem_vertex"><strong>rem_vertex</strong></a>(self, v)</dt><dd><tt>Remove&nbsp;vertex&nbsp;and&nbsp;incident&nbsp;edges.</tt></dd></dl>
<dl><dt><a name="Graph-reverse"><strong>reverse</strong></a>(self)</dt><dd><tt>return&nbsp;a&nbsp;reverse&nbsp;graph</tt></dd></dl>
<dl><dt><a name="Graph-set"><strong>set</strong></a>(self, v1, v2, value)</dt><dd><tt>Set&nbsp;value&nbsp;of&nbsp;edge&nbsp;(v1,v2)&nbsp;and&nbsp;add&nbsp;edge&nbsp;if&nbsp;it&nbsp;doesn't&nbsp;exist</tt></dd></dl>
<dl><dt><a name="Graph-set_bi"><strong>set_bi</strong></a>(self, v1, v2, value)</dt><dd><tt>Set&nbsp;value&nbsp;of&nbsp;edges&nbsp;(v1,v2)&nbsp;and&nbsp;(v2,v1).</tt></dd></dl>
<dl><dt><a name="Graph-subgraph"><strong>subgraph</strong></a>(self, vertices)</dt><dd><tt>Derive&nbsp;subgraph&nbsp;containing&nbsp;specified&nbsp;vertices&nbsp;and&nbsp;enclosed&nbsp;edges.</tt></dd></dl>
<dl><dt><a name="Graph-vertices"><strong>vertices</strong></a>(self)</dt><dd><tt>List&nbsp;vertices</tt></dd></dl>
<hr>
Methods inherited from <a href="geosolver.notify.html#Notifier">geosolver.notify.Notifier</a>:<br>
<dl><dt><a name="Graph-add_listener"><strong>add_listener</strong></a>(self, listener)</dt><dd><tt>add&nbsp;a&nbsp;listener&nbsp;to&nbsp;the&nbsp;list&nbsp;(and&nbsp;self&nbsp;to&nbsp;listers'&nbsp;list)</tt></dd></dl>
<dl><dt><a name="Graph-rem_listener"><strong>rem_listener</strong></a>(self, listener)</dt><dd><tt>remove&nbsp;a&nbsp;listener&nbsp;from&nbsp;the&nbsp;list&nbsp;(and&nbsp;self&nbsp;from&nbsp;listers'&nbsp;list)</tt></dd></dl>
<dl><dt><a name="Graph-send_notify"><strong>send_notify</strong></a>(self, message)</dt><dd><tt>send&nbsp;a&nbsp;message&nbsp;to&nbsp;all&nbsp;listeners</tt></dd></dl>
</td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#eeaa77">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Functions</strong></big></font></td></tr>
<tr><td bgcolor="#eeaa77"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl><dt><a name="-complete_graph"><strong>complete_graph</strong></a>(nvertices, monocycles<font color="#909090">=False</font>, basename<font color="#909090">='v'</font>)</dt></dl>
<dl><dt><a name="-random_graph"><strong>random_graph</strong></a>(vertices, edges, bidirectional<font color="#909090">=False</font>, basename<font color="#909090">='v'</font>)</dt><dd><tt>generate&nbsp;a&nbsp;random&nbsp;graph&nbsp;with&nbsp;given&nbsp;number&nbsp;of<br>
vertices&nbsp;and&nbsp;edges</tt></dd></dl>
</td></tr></table>
</body></html>