C1 = circle((0,0),1)
C2 = circle((0,0),2)
D3 = point([(cos(theta),sin(theta)) for theta in srange(0,2*pi,2*pi/3)],color='red')
D4 = point([(2*cos(theta),2*sin(theta)) for theta in  srange(0,2*pi,2*pi/5)])
P4 = point([(cos(2*pi*4/3),sin(2*pi*4/3)),  (2*cos(2*pi*4/5),2*sin(2*pi*4/5))],color='green',size=30)
C6 = circle((6,0),3)
D7 = point([(6+3*cos(theta),3*sin(theta)) for theta in  srange(0,2*pi,2*pi/15)],color='red')
P8 =  point([(6+3*cos(2*pi*4/15),3*sin(2*pi*4/15))],  color='green',size=30)
(C1+C2+D3+D4+P4+C6+D7+P8).show()
c67ffb39f62f2392dfa28b6784c3c3d3bcd05ee8.png
# Cycle graphs
# Ignore code until images
def circulae(L):
    n=len(L)
    return [L[j:j+2] for j in range(n-1)] + [[L[-1],L[0]]]

def circulaf(L,j):
    li = circulae(L)
    return [v+[j] for v in li]



G= CyclicPermutationGroup(4).direct_product(CyclicPermutationGroup(4))[0]; G

def GraphOfCycles(G):

    CYCLES = []
    for g in G:
        c = g.powers(g.order())
        CYCLES.append(Set(c))

    SC = Set(CYCLES)
    REDUNDANT = []
    for A in SC:
        for B in SC:
            if A.issubset(B) and A.cardinality() < B.cardinality():
                REDUNDANT.append(A)

    SR = Set(REDUNDANT)
    IRRCYC = SC.difference(SR)
    VERT = G.list()
    EDG = []
    for s in IRRCYC:
        EDG= EDG + circulae(s)

    return Graph([VERT,EDG])



def Cdirprod(L):
    G = CyclicPermutationGroup(1)
    for b in L:
        H = CyclicPermutationGroup(b)
        G = G.direct_product(H)[0]
    return G

Cyclic4=Cdirprod([4])
Cyclic4    
GraphOfCycles(Cyclic4)
baac293abd935204538782ac3c46dafecc9de285.png
C4=GraphOfCycles(Cyclic4); C4.show(vertex_labels=False)
c0e9ecb85854981cf29210e7cd25e81d382aa9b3.png
Cyclic222 = Cdirprod([2,2,2])
Cyclic222.order()
for g in Cyclic222:
    print g.order()
1
2
2
2
2
2
2
2
GraphOfCycles(Cyclic222).show(vertex_labels=False)
79b2d76d2217581bc5e8ff8caf581a6d3bfcc9ad.png