from cereeberus import ReebGraph
from cereeberus.data import ex_graphs
[docs]
def line(a=0, b=1, seed=None):
"""
Returns the Reeb graph of a simple line as a ReebGraph class. The endpoints have function value a and b respectively.
Parameters:
a, b (int): The function values for the two vertices in increasing order.
seed (int): Optional. The seed to use for the random number generator, which only controls the layout function.
Returns:
ReebGraph: The Reeb graph of the line.
.. figure:: ../../images/line.png
:figwidth: 400px
"""
R = ReebGraph()
R.add_node("a", a)
R.add_node("b", b)
R.add_edge("a", "b")
R.set_pos_from_f(seed=seed)
return R
[docs]
def torus(a=0, b=1, c=4, d=5, multigraph=True, seed=None):
"""
Returns the Reeb graph of a simple upright torus as a ReebGraph class.
Parameters:
a ,b, c, d (int): The function values for the four vertices in increasing order.
multigraph (bool): Optional. If False, then the loop edges will be subdivided so that the resulting graph doesn't have multiple edges between $b$ and $c$. Default is True.
seed (int): Optional. The seed to use for the random number generator, which only controls the layout function.
Returns:
ReebGraph: The Reeb graph of the torus.
.. figure:: ../../images/torus.png
:figwidth: 400px
"""
R = ReebGraph()
R.add_node("a", a)
R.add_node("b", b)
R.add_node("c", c)
R.add_node("d", d)
R.add_edge("a", "b")
R.add_edge("b", "c")
R.add_edge("b", "c")
R.add_edge("c", "d")
if not multigraph:
R.subdivide_edge("b", "c", "e", (b + c) / 2)
R.subdivide_edge("b", "c", "f", (b + c) / 2)
R.set_pos_from_f(seed=seed)
return R
[docs]
def dancing_man(seed=None):
"""
Returns the Reeb graph of the dancing man as a ReebGraph class.
Parameters:
seed (int): Optional. The seed to use for the random number generator, which only controls the layout function.
Returns:
ReebGraph: The Reeb graph of the dancing man.
.. figure:: ../../images/dancing_man.png
:figwidth: 400px
"""
return ReebGraph(ex_graphs.dancing_man(), seed=seed)
[docs]
def juggling_man(seed=None):
"""
Returns the Reeb graph of the juggling man as a ReebGraph class.
Parameters:
seed (int): Optional. The seed to use for the random number generator, which only controls the layout function.
Returns:
ReebGraph: The Reeb graph of the juggling man.
.. figure:: ../../images/juggling_man.png
:figwidth: 400px
"""
return ReebGraph(ex_graphs.juggling_man(), seed=seed)
[docs]
def simple_loops(seed=None):
"""
Returns the Reeb graph of the simple loops example.
Parameters:
seed (int): Optional. The seed to use for the random number generator, which only controls the layout function.
Returns:
ReebGraph: The Reeb graph of the simple loops example.
.. figure:: ../../images/simple_loops.png
:figwidth: 400px
"""
return ReebGraph(ex_graphs.simple_loops(), seed=seed)
[docs]
def simple_loops_unordered(seed=None):
"""
Returns the Reeb graph of the simple loops example.
Parameters:
seed (int): Optional. The seed to use for the random number generator, which only controls the layout function.
Returns:
ReebGraph: The Reeb graph of the simple loops example.
"""
return ReebGraph(ex_graphs.simple_loops_unordered(), seed=seed)
[docs]
def interleave_example_A(seed=None):
"""
Returns the Reeb graph of the first example for the interleave function.
Parameters:
seed (int): Optional. The seed to use for the random number generator, which only controls the layout function.
Returns:
ReebGraph: The Reeb graph of the first example for the interleave function.
.. figure:: ../../images/interleave_example_A.png
:figwidth: 400px
"""
R = dancing_man()
R.subdivide_edge(6, 7, 8, 3)
R.add_edge(8, 1)
R.f = {v: 2 * R.f[v] for v in R.nodes()}
R.set_pos_from_f(seed=seed)
return R
[docs]
def interleave_example_B(seed=None):
"""
Returns the Reeb graph of the second example for the interleave function.
Parameters:
seed (int): Optional. The seed to use for the random number generator, which only controls the layout function.
Returns:
ReebGraph: The Reeb graph of the second example for the interleave function.
.. figure:: ../../images/interleave_example_B.png
:figwidth: 400px
"""
R = interleave_example_A()
R.f[8] = 3
R.f[5] = 3
R.remove_edge(3, 1)
R.set_pos_from_f(seed=seed)
return R