import sys
from sage.all import *
print("\n\n Graph G \n")
G = Graph([('a', 'b'),('b', 'c'), ('d','a'), ('b', 'd')]); G.show()
print("\n\n Graph H \n\n")
H = Graph([(1, 2), (2, 3) ]); H.show()
print("\n\n Part Set of Graph G \n\n")
Pg = Set (G.vertices() + G.edges(labels=False)); Pg
print("\n\n Part Set of Graph H \n\n")
Ph = Set (H.vertices() + H.edges(labels=False)); Ph
X = FiniteSetMaps(Pg, Ph); X
Z = Set(X)
HomS = Set([]);
for f in Z:
s = True
for j in G.vertices():
if f(j)in H.vertices():
s=s and True
else:
s=s and False
for i in G.edges(labels=False):
u=i[0];
v=i[1];
if f(u)==f(v) and f(u)==f(i):
s=s and True
elif f(i)in H.edges(labels=False):
z=f(i);
if (z[0]==f(u) and z[1]==f(v)) or (z[1]==f(u) and z[0]==f(v)):
s=s and True
else:
s=s and False
else: s=s and False
if s==True:
HomS = HomS + Set([f])
Homfg = FiniteEnumeratedSet(HomS)
f = Homfg.random_element(); f
g = Homfg.random_element(); g
print("Grphs product of G and H")
Prod = G.strong_product(H); Prod.show()
print("Grphs co-product of G and H")
Coprod = G.disjoint_union(H); Coprod.show()
Eq = Graph()
print("\n\n Graph Eq V(Eq) \n\n")
for j in G.vertices():
if f(j)==g(j):
print(j)
Eq.add_vertex(j)
print("\n\n Graph Eq E(Eq) \n\n")
for j in G.edges(labels=False):
u=j[0]
v=j[1]
if f(j)==g(j) and j[0] in Eq.vertices() and j[1] in Eq.vertices():
Eq.add_edge(j)
Eq.edges(labels=False)
print("\n\n Graph Eq \n\n")
Eq.show()
Coeq = Graph(multiedges=True, loops=True)
Gdone = Set([])
Hdone = Set([])
for p in H.vertices():
if p not in Hdone:
Gtemp=Set([])
Htemp=Set([p])
s = False
while s == False:
Gcheck=Gtemp
Hcheck=Htemp
for x in Pg:
if f(x) in Htemp:
Gtemp = Gtemp + Set([x])
if g(x) in Htemp:
Gtemp = Gtemp + Set([x])
for p in Gtemp:
Htemp = Htemp + Set([f(p), g(p)])
if (Gtemp == Gcheck) and (Htemp == Hcheck):
s = True
Gdone = Gdone + Gtemp
Hdone = Hdone + Htemp
Coeq.add_vertex(Htemp)
for p in H.edges(labels=False):
if p not in Hdone:
Gtemp=Set([])
Htemp=Set([p])
s = False
while s == False:
Gcheck=Gtemp
Hcheck=Htemp
for x in Pg:
if f(x) in Htemp:
Gtemp = Gtemp + Set([x])
if g(x) in Htemp:
Gtemp = Gtemp + Set([x])
for p in Gtemp:
Htemp = Htemp + Set([f(p), g(p)])
if (Gtemp == Gcheck) and (Htemp == Hcheck):
s = True
Gdone = Gdone + Gtemp
Hdone = Hdone + Htemp
e=Htemp[0]
for v in Coeq.vertices():
if e[0] in v:
a = v
if e[1] in v:
b = v
Coeq.add_edge(a, b, Htemp)
print("\n\n Coequalizer \n\n")
Coeq.show()
Graph G
Graph H
Part Set of Graph G
{'a', 'c', 'b', 'd', ('b', 'c'), ('a', 'd'), ('a', 'b'), ('b', 'd')}
Part Set of Graph H
{(1, 2), 1, 2, 3, (2, 3)}
Maps from {'a', 'c', 'b', 'd', ('b', 'c'), ('a', 'd'), ('a', 'b'), ('b', 'd')} to {(1, 2), 1, 2, 3, (2, 3)}
map: a -> 2, c -> 1, b -> 2, d -> 3, ('b', 'c') -> (1, 2), ('a', 'd') -> (2, 3), ('a', 'b') -> 2, ('b', 'd') -> (2, 3)
map: a -> 1, c -> 3, b -> 2, d -> 1, ('b', 'c') -> (2, 3), ('a', 'd') -> 1, ('a', 'b') -> (1, 2), ('b', 'd') -> (1, 2)
Grphs product of G and H
Grphs co-product of G and H
Graph Eq V(Eq)
b
Graph Eq E(Eq)
[]
Graph Eq
Coequalizer
Coequalizer
map: a -> 1, c -> 3, b -> 2, d -> 1, ('b', 'c') -> (2, 3), ('a', 'd') -> 1, ('a', 'b') -> (1, 2), ('b', 'd') -> (1, 2)
Grphs co-product of G and H
Graph Eq V(Eq)
b
Graph Eq E(Eq)
[]
Graph Eq
Coequalizer