Tyler Laing <[EMAIL PROTECTED]> added the comment:

Same problem, even with new-style classes. Here, I'll show the function
I use to generate the graph as well.

class Vertex(object):
        def __init__(self, type):
                self.type = type
                self.color=-1
                self.edges=[]
                

                
class Edge(object):
        def __init__(self, V1, V2):
                self.vertexes=[V1, V2]
                V1.edges.append(self)
                V2.edges.append(self)

def generate(graph={'V':[], 'E':[]}, seed=777, vertexes=5, edges=25):
        #generates a graph similar to the KEGG pathway database format.
        # Purpose is for testing algorithms on a smaller scale "predicatible" 
graph
        # For that reason, the "random" selections are seeded with a known
number. This is to be able
        # to measure efficacy, in that on the same graph, if algorithm A
performs in half the time, its 
        # not a characteristic of the graph, but the algorithm.
        r=random.Random(seed)
        p=[0, 0, 0, 0]
        c=0
        #generate vertices, with a regularly incremented set of numbers, to
appear like the KEGG pathway database does.
        while c!=vertexes:
                #This is ugly, could be done easier in a loop. Fix later.
                p[3]+=1
                if p[3]>9:
                        p[3]=0
                        p[2]+=1
                if p[2]>9:
                        p[2]=0
                        p[1]+=1
                if p[1]>9:
                        p[1]=0
                        p[0]+=1
                #we copy the set of numbers, due to the way python passes lists 
by
reference, instead of by copy.
                v=Vertex(p[:])
                graph['V'].append(v)
                c+=1
        
        
        v=graph['V']
        if len(v)!=vertexes:
                print "Not enough vertices, aborting."
                return graph
        c=0
        #randomly choose two vertices. Could even, randomly, be the same vertex.
        # Then, connect an edge between them. Just creating the edge by
implication,
        # with the vertices passed, connects them all together.
        while c!=edges:
                v1=r.choice(v)
                v2=r.choice(v)
                graph['E'].append(Edge(v1, v2))
                c+=1
        
        if len(graph['E']) !=edges:
                print "Not enough edges, aborting."
        return graph

And here is how I use it:

>>>import graph, copy
>>>g=graph.generate(vertexes=100, edges=500)
>>>g2=copy.deepcopy(g)

Thanks for the prompt response, this isn't critical in nature, just
playing around with the graph, and wanted to alter a copy of it. Ran
into this bug, thought I should report it. :)

-Zeroth

_______________________________________
Python tracker <[EMAIL PROTECTED]>
<http://bugs.python.org/issue3043>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to