Help with chaos math extensions.

Brandon K prince_amir86 at yahoo.com
Wed Oct 5 08:12:08 EDT 2005


Here's the Script it was being used in (forgive it if it seems a bit 
messy, i have been tinkering with variables and such to try different 
ideas and haven't really cleaned it up).

import ctest
import Tkinter
import threading

hue_map = 
("#FFFFFF","#FEFEFF","#FDFDFF","#FCFCFF","#FBFBFF","#FAFAFF","#F9F9FF","#F8F8F8","#F7F7FF","#F6F6F6","#EEEEFF","#DDDDFF","#CCCCFF","#BBBBFF","#AAAAFF","#9999FF","#8888FF",\
        
"#7777FF","#6666FF","#5555FF","#4444FF","#3333FF","#2222FF","#1111FF","#0000FF")

class Mandelbrot_Set(Tkinter.Canvas):
    def __init__(self,master,iters):
        Tkinter.Canvas.__init__(self,master)
        self.dims = {'x':500,'y':500}
        self.config(height=self.dims['y'],width=self.dims['x'])
        self.r_range = (-2.0,2.0)
        self.i_range = (-2.0,2.0)
        self.iters = iters
        self.prec = 
{'r':1.*(self.r_range[1]-self.r_range[0])/(self.dims['x']),'i':1.*(self.i_range[1]-self.i_range[0])/self.dims['y']}
        self.escapemap = 
ctest.escapeMap(-1j,self.iters,(self.dims['x'],self.dims['y']),(self.r_range[0],self.r_range[1]),(self.i_range[0],self.i_range[1]))
        self.select = False
        self.select_event = (0,0)
        self.sbox = None
        self.bind("<Button-1>",self.selection_box)
        self.bind("<Motion>",self.select_update)
        self.t_draw = threading.Thread(target=self.draw)
        self.t_draw.start()
       
    def draw(self):
        for j in range(self.dims['y']):
            i = 0
            while i < self.dims['x']:
                cur = 0;
                try:
                    color = self.escapemap[j][i]
                    while self.escapemap[j][i+cur] == color:
                        cur+=1
                except IndexError:
                    break;
                hue_step = 1.*len(hue_map)/self.iters
                if color == -1: f = "#000000"
                else: f = hue_map[int(hue_step*color)]
                self.create_line(i,j,i+cur,j,fill=f)
                i+=cur
               
    def selection_box(self,event):
        if not self.select:
            self.select_event = (event.x,event.y)
            self.select = True
        else:
            self.r_range = self.new_range(event.x,self.select_event[0])
            self.i_range = self.new_range(event.y,self.select_event[1])
            print self.r_range,self.i_range
            self.select = False
            self.delete(Tkinter.ALL)
            self.t_draw.run()
        self.select_update(event)
       
    def new_range(self,x,y):
        if x > y:
            return (y,x)
        else:
            return (x,y)
       
    def select_update(self,event):
        if not self.select:
            return
        else:
            if self.sbox != None:
                self.delete(self.sbox)
                self.sbox = 
self.create_rectangle(self.select_event[0],self.select_event[1],event.x,event.y,fill=None,outline="#000000")
            else:
                self.sbox = 
self.create_rectangle(self.select_event[0],self.select_event[1],event.x,event.y,fill=None,outline="#000000")
           
if __name__ == "__main__":
    root = Tkinter.Tk()
    c = Mandelbrot_Set(root,50)
    c.pack()
    root.mainloop()

The error occurs in the instantiation of the Mandelbrot_Set object.
Additionally in little mini timing scripts such as

import time
import ctest

t = time.time()
c = ctest.escapeMap(-1j,100,(500,500))
print time.time()-t

this will crash it too
however I found that just opening up the interpreter and typing

import ctest
ctest.escapeMap(-1j,100,(50,50)) #50 yields much smaller output than 500x500

it generates a 2d tuple fine.  So the error seems really obscure to me, 
and I don't understand it.
> Brandon Keown wrote:
>
>   
>>    I have programmed a fractal generator (Julia Set/Mandelbrot Set) in
>> python in the past, and have had good success, but it would run so
>> slowly because of the overhead involved with the calculation.  I
>> recently purchased VS .NET 2003 (Win XP, precomp binary of python
>> 2.4.2rc1) to make my own extensions.  I was wondering if anyone could
>> help me figure out why I'm getting obscure memory exceptions (runtime
>> errors resulting in automatic closing of Python) with my extension.  It
>> seems to run okay if imported alone, but when accompanied in a list of
>> instructions such as a function it crashes.
>>     
>
> a short script or interpreter session that illustrates how to get the errors
> would help.
>
> </F> 
>
>
>
>   

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20051005/3d04a590/attachment.html>


More information about the Python-list mailing list