Problem to disable autoscale

Hi everyone,

I use matplotlib to render a figure in a tkinter (the Tix library more precisely) canvas.
It works very well but I can't turn off the autoscale (and I would like to), even by setting
ax.set_autoscale_on(False). When I test with ax.get_autoscale_on(), the result is False, but the
axes continues to autoscale.

I didn't had this problem in the past with ubuntu 8.04. I have it since I made the update to the
8.10 distribution so I guess that it's because the version of matplotlib I use have changed also
(but I don't remember the number of this previous version). Now I use python 2.5.2, Tix 8.4.0, mpl
0.98.3, numpy 1.2.1 ppa release, scipy 0.7.0 ppa release.

Here is the graphic part of my app :

class GraphFrame(Tix.Frame):
    def __init__(self,master):
        Tix.Frame.__init__(self,master,bd=10)
        self.gen = Tix.Frame(self)
        self.fps = Figure(figsize=(5,4),dpi=100,facecolor='w')

        self.tlps = 'Phase Space'
        self.xlps = {'xlabel' : r'$x$','fontsize' : 16}
        self.ylps = {'ylabel' : r'$p$','rotation' : 'horizontal','fontsize' : 16}
        self.aps = self.fps.add_subplot(111)
        self.aps.set_title(self.tlps)
        self.aps.set_xlabel(**self.xlps)
        self.aps.set_ylabel(**self.ylps)
        self.canvasps = FigureCanvasTkAgg(self.fps,master=self.gen)
        self.canvasps.get_tk_widget().pack(side=Tix.TOP,fill=Tix.BOTH,expand=1)
        self.toolbar = NavigationToolbar2TkAgg(self.canvasps, self.gen)
        self.toolbar.update()
        self.canvasps._tkcanvas.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
        self.gen.grid(row=0, columnspan=14, sticky='NWSE')
        self.aps.set_autoscale_on(False) #doesn't work !!!
# self.aps.autoscale_view(scalex=False,scaley=False)
        self.psLin = []
        self.cl = ('r','g','b','c','y','m','k')
        self.coch = self.canvasps.mpl_connect('button_press_event', self.onpsclick)
        self.crh = self.canvasps.mpl_connect('button_release_event', self.onpsrelease)
        self.cmh = self.canvasps.mpl_connect('motion_notify_event', self.onpsmotion)
        self.cFrame = None
        self.press = False

    def ocps_connect(self):
        self.coch = self.canvasps.mpl_connect('button_press_event', self.onpsclick)
        self.crh = self.canvasps.mpl_connect('button_release_event', self.onpsrelease)
        self.cmh = self.canvasps.mpl_connect('motion_notify_event', self.onpsmotion)

    def ocps_disconnect(self):
        self.canvasps.mpl_disconnect(self.coch)
        self.canvasps.mpl_disconnect(self.crh)
        self.canvasps.mpl_disconnect(self.cmh)

#some method I use to update the graph

    def psaddData_m(self,u,xmin,xmax,pmin,pmax,m=','):
        line = lines.Line2D(u[:,0],u[:,1],
                                 linestyle='None',
                                 marker=m,
                                 color=self.cl[np.mod(len(self.psLin)-1,6)])
        self.psLin.append(line)
        self.psDraw(xmin,xmax,pmin,pmax)

    def psaddData_l(self,u,xmin,xmax,pmin,pmax,l='-'):
        line = lines.Line2D(u[:,0],u[:,1],
                            linestyle=l,
                            color=self.cl[np.mod(len(self.psLin)-1,6)])
        self.psLin.append(line)
        self.psDraw(xmin,xmax,pmin,pmax)

    def psdelData(self,n):
        del self.psLin[n]
        self.aps.clear()
# self.aps.cla()
        for l in self.psLin:
            self.aps.add_line(l)
        self.aps.set_title(self.tlps)
        self.aps.set_xlabel(**self.xlps)
        self.aps.set_ylabel(**self.ylps)
        self.aps.redraw_in_frame()
        self.canvasps.blit()

    def psDraw(self,xmin,xmax,pmin,pmax):
# self.aps.clear()
        self.aps.cla()
        self.aps.set_xlim(xmin,xmax)
        self.aps.set_ylim(pmin,pmax)
        for l in self.psLin:
            self.aps.add_line(l)
        self.aps.set_title(self.tlps)
        self.aps.set_xlabel(**self.xlps)
        self.aps.set_ylabel(**self.ylps)
        self.aps.draw()
        self.canvasps.blit()
# self.aps.set_autoscale_on(False)
# self.aps.autoscale_view(scalex=False,scaley=False)
# a = self.aps.get_autoscale_on()
# print a

    def psifRedraw(self):
        self.aps.clear()
# self.aps.cla()
        for l in self.psLin:
            self.aps.add_line(l)
        self.aps.set_title(self.tlps)
        self.aps.set_xlabel(**self.xlps)
        self.aps.set_ylabel(**self.ylps)
        self.aps.redraw_in_frame()
        self.canvasps.blit()

    def psRedraw(self):
        self.aps.redraw_in_frame()
        self.canvasps.blit()

# click event handling

    def onpsclick(self,event):

        Bhv=self.cFrame.stDico['psMode'].get()

        if event.inaxes!=self.aps: return
        if Bhv == 'Nothing': return

        self.press = True

        if Bhv == 'Traj':

            niter=int(self.cFrame.stDico['n iter'].get())
            jb = self.cFrame.TrajJacob.get()
            if jb:
                lj = float(self.cFrame.TJDirlStr.get())
                hj = float(self.cFrame.TJDirhderStr.get())
            jnb = self.cFrame.nTrajJacob.get()
            if jnb:
                ljn = float(self.cFrame.nTJDirlStr.get())
                hjn = float(self.cFrame.nTJDirhderStr.get())

            v = np.array([event.xdata,event.ydata])
            s = [v]
            if jb: sj = [Jacob(v,hj,utils.dfridr)]
            if jnb: sjn = [Jacob(v,hjn,utils.dfridr)]
            for i in xrange(0,niter):
                u = pm.Map(v)
                s.append(u)
                v = u
                if jb: sj.append(Jacob(v,hj,utils.dfridr))
                if jnb: sjn.append(np.dot(sjn[-1],Jacob(v,hjn,utils.dfridr)))
            w = np.vstack(s)
            line = lines.Line2D(w[:,0],w[:,1],color='b')
            if jb:
                for i in xrange(len(sj)):
                    J = sj[i]
                    v = s[i]
                    (lr,vr) = eig(J,right=True)
                    if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0:
                        print 'Problem : The point '+str(i+1)+' is not hyperbolic'
                        print 'J=',J
                        print 'l=',lr
                    else:
                        if abs(lr[0]) < 1.:
                            u1 = vr[:,0]
                            u2 = vr[:,1]
                        else:
                            u1 = vr[:,1]
                            u2 = vr[:,0]
                        ul1 = np.vstack([v-lj*u1,v+lj*u1])
                        ul2 = np.vstack([v-lj*u2,v+lj*u2])
                        line1 = lines.Line2D(ul1[:,0],ul1[:,1],color='b')
                        line2 = lines.Line2D(ul2[:,0],ul2[:,1],color='r')
                        self.aps.add_line(line1)
                        self.aps.add_line(line2)
            if jnb:
                for i in xrange(len(sjn)):
                    J = sjn[i]
                    v = s[i]
                    (lr,vr) = eig(J,right=True)
                    if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0:
                        print 'Problem : The traj '+str(i+1)+' is not hyperbolic'
                        print 'J=',J
                        print 'l=',lr
                    else:
                        if abs(lr[0]) < 1.:
                            u1 = vr[:,0]
                            u2 = vr[:,1]
                        else:
                            u1 = vr[:,1]
                            u2 = vr[:,0]
                        ul1 = np.vstack([v-ljn*u1,v+ljn*u1])
                        ul2 = np.vstack([v-ljn*u2,v+ljn*u2])
                        line1 = lines.Line2D(ul1[:,0],ul1[:,1],color='g')
                        line2 = lines.Line2D(ul2[:,0],ul2[:,1],color='m')
                        self.aps.add_line(line1)
                        self.aps.add_line(line2)

        elif Bhv == '1it':
            v = np.array([event.xdata,event.ydata])
            u = pm.Map(v)
            w = np.vstack([v,u])
            line = lines.Line2D(w[:,0],w[:,1],
                                linestyle='None',
                                marker='+',
                                markersize=10.,
                                color='k')
        elif Bhv == 'Preim':

            xmin=float(self.cFrame.stDico['pixmin'].get())
            xmax=float(self.cFrame.stDico['pixmax'].get())
            pmin=float(self.cFrame.stDico['pipmin'].get())
            pmax=float(self.cFrame.stDico['pipmax'].get())
            nx=int(self.cFrame.stDico['pinx'].get())
            ny=int(self.cFrame.stDico['pinp'].get())
            tol=float(self.cFrame.stDico['pitol'].get())
            it=int(self.cFrame.stDico['piter'].get())
            al=float(self.cFrame.stDico['pialpha'].get())
            npim = self.cFrame.preimmVar.get()

            v = np.array([event.xdata,event.ydata])
            u = preMap(npim,v,xmin,xmax,pmin,pmax,nx,ny,tol,it,al)
            if u != None:
                w = np.vstack([v,u])
            else:
                w = v
                w.shape = 1,2
            line = lines.Line2D(w[:,0],w[:,1],
                                linestyle='None',
                                marker='+',
                                markersize=10.,
                                color='k')

        elif Bhv == 'Jacob':
            l = float(self.cFrame.DirlStr.get())
            h = float(self.cFrame.DirhderStr.get())
            v = np.array([event.xdata,event.ydata])
            J = Jacob(v,h,utils.dfridr)
            (lr,vr) = eig(J,right=True)
            if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0:
                print 'Problem : The point is not hyperbolic'
                print 'J=',J
                print 'l=',lr
                return
            if abs(lr[0]) < 1.:
                u1 = vr[:,0]
                u2 = vr[:,1]
            else:
                u1 = vr[:,1]
                u2 = vr[:,0]
            ul1 = np.vstack([v-l*u1,v+l*u1])
            ul2 = np.vstack([v-l*u2,v+l*u2])
            line = lines.Line2D(ul1[:,0],ul1[:,1],color='b')
            line1 = lines.Line2D(ul2[:,0],ul2[:,1],color='r')
            self.aps.add_line(line1)

        self.aps.add_line(line)
# self.aps.set_title(self.tlps)
# self.aps.set_xlabel(**self.xlps)
# self.aps.set_ylabel(**self.ylps)
        self.aps.redraw_in_frame()
        self.canvasps.blit()

    def onpsmotion(self,event):

        Bhv=self.cFrame.stDico['psMode'].get()

        if event.inaxes!=self.aps: return
        if self.press == False: return
        if Bhv == 'Nothing': return

        self.aps.clear()
# self.aps.cla()
        for l in self.psLin:
            self.aps.add_line(l)
        self.aps.set_title(self.tlps)
        self.aps.set_xlabel(**self.xlps)
        self.aps.set_ylabel(**self.ylps)

        if Bhv == 'Traj':

            niter=int(self.cFrame.stDico['n iter'].get())
            jb = self.cFrame.TrajJacob.get()
            if jb:
                lj = float(self.cFrame.TJDirlStr.get())
                hj = float(self.cFrame.TJDirhderStr.get())
            jnb = self.cFrame.nTrajJacob.get()
            if jnb:
                ljn = float(self.cFrame.nTJDirlStr.get())
                hjn = float(self.cFrame.nTJDirhderStr.get())

            v = np.array([event.xdata,event.ydata])
            s = [v]
            if jb: sj = [Jacob(v,hj,utils.dfridr)]
            if jnb: sjn = [Jacob(v,hjn,utils.dfridr)]
            for i in xrange(0,niter):
                u = pm.Map(v)
                s.append(u)
                v = u
                if jb: sj.append(Jacob(v,hj,utils.dfridr))
                if jnb: sjn.append(np.dot(sjn[-1],Jacob(v,hjn,utils.dfridr)))
            w = np.vstack(s)
            line = lines.Line2D(w[:,0],w[:,1],color='b')
            if jb:
                for i in xrange(len(sj)):
                    J = sj[i]
                    v = s[i]
                    (lr,vr) = eig(J,right=True)
                    if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0:
                        print 'Problem : The point '+str(i+1)+' is not hyperbolic'
                        print 'J=',J
                        print 'l=',lr
                    else:
                        if abs(lr[0]) < 1.:
                            u1 = vr[:,0]
                            u2 = vr[:,1]
                        else:
                            u1 = vr[:,1]
                            u2 = vr[:,0]
                        ul1 = np.vstack([v-lj*u1,v+lj*u1])
                        ul2 = np.vstack([v-lj*u2,v+lj*u2])
                        line1 = lines.Line2D(ul1[:,0],ul1[:,1],color='b')
                        line2 = lines.Line2D(ul2[:,0],ul2[:,1],color='r')
                        self.aps.add_line(line1)
                        self.aps.add_line(line2)
            if jnb:
                for i in xrange(len(sjn)):
                    J = sjn[i]
                    v = s[i]
                    (lr,vr) = eig(J,right=True)
                    if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0:
                        print 'Problem : The traj '+str(i+1)+' is not hyperbolic'
                        print 'J=',J
                        print 'l=',lr
                    else:
                        if abs(lr[0]) < 1.:
                            u1 = vr[:,0]
                            u2 = vr[:,1]
                        else:
                            u1 = vr[:,1]
                            u2 = vr[:,0]
                        ul1 = np.vstack([v-ljn*u1,v+ljn*u1])
                        ul2 = np.vstack([v-ljn*u2,v+ljn*u2])
                        line1 = lines.Line2D(ul1[:,0],ul1[:,1],color='g')
                        line2 = lines.Line2D(ul2[:,0],ul2[:,1],color='m')
                        self.aps.add_line(line1)
                        self.aps.add_line(line2)

        elif Bhv == '1it':
            v = np.array([event.xdata,event.ydata])
            u = pm.Map(v)
            w = np.vstack([v,u])
            line = lines.Line2D(w[:,0],w[:,1],
                                linestyle='None',
                                marker='+',
                                markersize=10.,
                                color='k')
        elif Bhv == 'Preim':

            xmin=float(self.cFrame.stDico['pixmin'].get())
            xmax=float(self.cFrame.stDico['pixmax'].get())
            pmin=float(self.cFrame.stDico['pipmin'].get())
            pmax=float(self.cFrame.stDico['pipmax'].get())
            nx=int(self.cFrame.stDico['pinx'].get())
            ny=int(self.cFrame.stDico['pinp'].get())
            tol=float(self.cFrame.stDico['pitol'].get())
            it=int(self.cFrame.stDico['piter'].get())
            al=float(self.cFrame.stDico['pialpha'].get())
            npim = self.cFrame.preimmVar.get()

            v = np.array([event.xdata,event.ydata])
            u = preMap(npim,v,xmin,xmax,pmin,pmax,nx,ny,tol,it,al)
            if u != None:
                w = np.vstack([v,u])
            else:
                w = v
                w.shape = 1,2
            line = lines.Line2D(w[:,0],w[:,1],
                                linestyle='None',
                                marker='+',
                                markersize=10.,
                                color='k')
        elif Bhv == 'Jacob':
            l = float(self.cFrame.DirlStr.get())
            h = float(self.cFrame.DirhderStr.get())
            v = np.array([event.xdata,event.ydata])
            J = Jacob(v,h,utils.dfridr)
            (lr,vr) = eig(J,right=True)
            if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0:
                print 'Problem : The point is not hyperbolic'
                print 'J=',J
                print 'l=',lr
                return
            if abs(lr[0]) < 1.:
                u1 = vr[:,0]
                u2 = vr[:,1]
            else:
                u1 = vr[:,1]
                u2 = vr[:,0]
            ul1 = np.vstack([v-l*u1,v+l*u1])
            ul2 = np.vstack([v-l*u2,v+l*u2])
            line = lines.Line2D(ul1[:,0],ul1[:,1],color='b')
            line1 = lines.Line2D(ul2[:,0],ul2[:,1],color='r')
            self.aps.add_line(line1)

        self.aps.add_line(line)
# self.aps.set_title(self.tlps)
# self.aps.set_xlabel(**self.xlps)
# self.aps.set_ylabel(**self.ylps)
        self.aps.redraw_in_frame()
        self.canvasps.blit()

    def onpsrelease(self,event):
        self.press = False
        self.aps.clear()
# self.aps.cla()
        for l in self.psLin:
            self.aps.add_line(l)
        self.aps.set_title(self.tlps)
        self.aps.set_xlabel(**self.xlps)
        self.aps.set_ylabel(**self.ylps)
        self.aps.redraw_in_frame()
        self.canvasps.blit()
# end

I don't know if it is a bug or something else but thank you in advance if you can help me.

Jonathan

Hi,

I found the problem. It was not a bug of matplotlib (of course should I say). It was a bug in my
code (with the click event handling method).

Jonathan

Demaeyer Jonathan a �crit :

···

Hi everyone,

I use matplotlib to render a figure in a tkinter (the Tix library more precisely) canvas.
It works very well but I can't turn off the autoscale (and I would like to), even by setting
ax.set_autoscale_on(False). When I test with ax.get_autoscale_on(), the result is False, but the
axes continues to autoscale.

I didn't had this problem in the past with ubuntu 8.04. I have it since I made the update to the
8.10 distribution so I guess that it's because the version of matplotlib I use have changed also
(but I don't remember the number of this previous version). Now I use python 2.5.2, Tix 8.4.0, mpl
0.98.3, numpy 1.2.1 ppa release, scipy 0.7.0 ppa release.

Here is the graphic part of my app :

class GraphFrame(Tix.Frame):
    def __init__(self,master):
        Tix.Frame.__init__(self,master,bd=10)
        self.gen = Tix.Frame(self)
        self.fps = Figure(figsize=(5,4),dpi=100,facecolor='w')

        self.tlps = 'Phase Space'
        self.xlps = {'xlabel' : r'$x$','fontsize' : 16}
        self.ylps = {'ylabel' : r'$p$','rotation' : 'horizontal','fontsize' : 16}
        self.aps = self.fps.add_subplot(111)
        self.aps.set_title(self.tlps)
        self.aps.set_xlabel(**self.xlps)
        self.aps.set_ylabel(**self.ylps)
        self.canvasps = FigureCanvasTkAgg(self.fps,master=self.gen)
        self.canvasps.get_tk_widget().pack(side=Tix.TOP,fill=Tix.BOTH,expand=1)
        self.toolbar = NavigationToolbar2TkAgg(self.canvasps, self.gen)
        self.toolbar.update()
        self.canvasps._tkcanvas.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
        self.gen.grid(row=0, columnspan=14, sticky='NWSE')
        self.aps.set_autoscale_on(False) #doesn't work !!!
# self.aps.autoscale_view(scalex=False,scaley=False)
        self.psLin = []
        self.cl = ('r','g','b','c','y','m','k')
        self.coch = self.canvasps.mpl_connect('button_press_event', self.onpsclick)
        self.crh = self.canvasps.mpl_connect('button_release_event', self.onpsrelease)
        self.cmh = self.canvasps.mpl_connect('motion_notify_event', self.onpsmotion)
        self.cFrame = None
        self.press = False

    def ocps_connect(self):
        self.coch = self.canvasps.mpl_connect('button_press_event', self.onpsclick)
        self.crh = self.canvasps.mpl_connect('button_release_event', self.onpsrelease)
        self.cmh = self.canvasps.mpl_connect('motion_notify_event', self.onpsmotion)

    def ocps_disconnect(self):
        self.canvasps.mpl_disconnect(self.coch)
        self.canvasps.mpl_disconnect(self.crh)
        self.canvasps.mpl_disconnect(self.cmh)

#some method I use to update the graph

    def psaddData_m(self,u,xmin,xmax,pmin,pmax,m=','):
        line = lines.Line2D(u[:,0],u[:,1],
                                 linestyle='None',
                                 marker=m,
                                 color=self.cl[np.mod(len(self.psLin)-1,6)])
        self.psLin.append(line)
        self.psDraw(xmin,xmax,pmin,pmax)

    def psaddData_l(self,u,xmin,xmax,pmin,pmax,l='-'):
        line = lines.Line2D(u[:,0],u[:,1],
                            linestyle=l,
                            color=self.cl[np.mod(len(self.psLin)-1,6)])
        self.psLin.append(line)
        self.psDraw(xmin,xmax,pmin,pmax)

    def psdelData(self,n):
        del self.psLin[n]
        self.aps.clear()
# self.aps.cla()
        for l in self.psLin:
            self.aps.add_line(l)
        self.aps.set_title(self.tlps)
        self.aps.set_xlabel(**self.xlps)
        self.aps.set_ylabel(**self.ylps)
        self.aps.redraw_in_frame()
        self.canvasps.blit()

    def psDraw(self,xmin,xmax,pmin,pmax):
# self.aps.clear()
        self.aps.cla()
        self.aps.set_xlim(xmin,xmax)
        self.aps.set_ylim(pmin,pmax)
        for l in self.psLin:
            self.aps.add_line(l)
        self.aps.set_title(self.tlps)
        self.aps.set_xlabel(**self.xlps)
        self.aps.set_ylabel(**self.ylps)
        self.aps.draw()
        self.canvasps.blit()
# self.aps.set_autoscale_on(False)
# self.aps.autoscale_view(scalex=False,scaley=False)
# a = self.aps.get_autoscale_on()
# print a

    def psifRedraw(self):
        self.aps.clear()
# self.aps.cla()
        for l in self.psLin:
            self.aps.add_line(l)
        self.aps.set_title(self.tlps)
        self.aps.set_xlabel(**self.xlps)
        self.aps.set_ylabel(**self.ylps)
        self.aps.redraw_in_frame()
        self.canvasps.blit()

    def psRedraw(self):
        self.aps.redraw_in_frame()
        self.canvasps.blit()

# click event handling

    def onpsclick(self,event):

        Bhv=self.cFrame.stDico['psMode'].get()

        if event.inaxes!=self.aps: return
        if Bhv == 'Nothing': return

        self.press = True

        if Bhv == 'Traj':

            niter=int(self.cFrame.stDico['n iter'].get())
            jb = self.cFrame.TrajJacob.get()
            if jb:
                lj = float(self.cFrame.TJDirlStr.get())
                hj = float(self.cFrame.TJDirhderStr.get())
            jnb = self.cFrame.nTrajJacob.get()
            if jnb:
                ljn = float(self.cFrame.nTJDirlStr.get())
                hjn = float(self.cFrame.nTJDirhderStr.get())

            v = np.array([event.xdata,event.ydata])
            s = [v]
            if jb: sj = [Jacob(v,hj,utils.dfridr)]
            if jnb: sjn = [Jacob(v,hjn,utils.dfridr)]
            for i in xrange(0,niter):
                u = pm.Map(v)
                s.append(u)
                v = u
                if jb: sj.append(Jacob(v,hj,utils.dfridr))
                if jnb: sjn.append(np.dot(sjn[-1],Jacob(v,hjn,utils.dfridr)))
            w = np.vstack(s)
            line = lines.Line2D(w[:,0],w[:,1],color='b')
            if jb:
                for i in xrange(len(sj)):
                    J = sj[i]
                    v = s[i]
                    (lr,vr) = eig(J,right=True)
                    if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0:
                        print 'Problem : The point '+str(i+1)+' is not hyperbolic'
                        print 'J=',J
                        print 'l=',lr
                    else:
                        if abs(lr[0]) < 1.:
                            u1 = vr[:,0]
                            u2 = vr[:,1]
                        else:
                            u1 = vr[:,1]
                            u2 = vr[:,0]
                        ul1 = np.vstack([v-lj*u1,v+lj*u1])
                        ul2 = np.vstack([v-lj*u2,v+lj*u2])
                        line1 = lines.Line2D(ul1[:,0],ul1[:,1],color='b')
                        line2 = lines.Line2D(ul2[:,0],ul2[:,1],color='r')
                        self.aps.add_line(line1)
                        self.aps.add_line(line2)
            if jnb:
                for i in xrange(len(sjn)):
                    J = sjn[i]
                    v = s[i]
                    (lr,vr) = eig(J,right=True)
                    if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0:
                        print 'Problem : The traj '+str(i+1)+' is not hyperbolic'
                        print 'J=',J
                        print 'l=',lr
                    else:
                        if abs(lr[0]) < 1.:
                            u1 = vr[:,0]
                            u2 = vr[:,1]
                        else:
                            u1 = vr[:,1]
                            u2 = vr[:,0]
                        ul1 = np.vstack([v-ljn*u1,v+ljn*u1])
                        ul2 = np.vstack([v-ljn*u2,v+ljn*u2])
                        line1 = lines.Line2D(ul1[:,0],ul1[:,1],color='g')
                        line2 = lines.Line2D(ul2[:,0],ul2[:,1],color='m')
                        self.aps.add_line(line1)
                        self.aps.add_line(line2)

        elif Bhv == '1it':
            v = np.array([event.xdata,event.ydata])
            u = pm.Map(v)
            w = np.vstack([v,u])
            line = lines.Line2D(w[:,0],w[:,1],
                                linestyle='None',
                                marker='+',
                                markersize=10.,
                                color='k')
        elif Bhv == 'Preim':

            xmin=float(self.cFrame.stDico['pixmin'].get())
            xmax=float(self.cFrame.stDico['pixmax'].get())
            pmin=float(self.cFrame.stDico['pipmin'].get())
            pmax=float(self.cFrame.stDico['pipmax'].get())
            nx=int(self.cFrame.stDico['pinx'].get())
            ny=int(self.cFrame.stDico['pinp'].get())
            tol=float(self.cFrame.stDico['pitol'].get())
            it=int(self.cFrame.stDico['piter'].get())
            al=float(self.cFrame.stDico['pialpha'].get())
            npim = self.cFrame.preimmVar.get()

            v = np.array([event.xdata,event.ydata])
            u = preMap(npim,v,xmin,xmax,pmin,pmax,nx,ny,tol,it,al)
            if u != None:
                w = np.vstack([v,u])
            else:
                w = v
                w.shape = 1,2
            line = lines.Line2D(w[:,0],w[:,1],
                                linestyle='None',
                                marker='+',
                                markersize=10.,
                                color='k')

        elif Bhv == 'Jacob':
            l = float(self.cFrame.DirlStr.get())
            h = float(self.cFrame.DirhderStr.get())
            v = np.array([event.xdata,event.ydata])
            J = Jacob(v,h,utils.dfridr)
            (lr,vr) = eig(J,right=True)
            if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0:
                print 'Problem : The point is not hyperbolic'
                print 'J=',J
                print 'l=',lr
                return
            if abs(lr[0]) < 1.:
                u1 = vr[:,0]
                u2 = vr[:,1]
            else:
                u1 = vr[:,1]
                u2 = vr[:,0]
            ul1 = np.vstack([v-l*u1,v+l*u1])
            ul2 = np.vstack([v-l*u2,v+l*u2])
            line = lines.Line2D(ul1[:,0],ul1[:,1],color='b')
            line1 = lines.Line2D(ul2[:,0],ul2[:,1],color='r')
            self.aps.add_line(line1)

        self.aps.add_line(line)
# self.aps.set_title(self.tlps)
# self.aps.set_xlabel(**self.xlps)
# self.aps.set_ylabel(**self.ylps)
        self.aps.redraw_in_frame()
        self.canvasps.blit()

    def onpsmotion(self,event):

        Bhv=self.cFrame.stDico['psMode'].get()

        if event.inaxes!=self.aps: return
        if self.press == False: return
        if Bhv == 'Nothing': return

        self.aps.clear()
# self.aps.cla()
        for l in self.psLin:
            self.aps.add_line(l)
        self.aps.set_title(self.tlps)
        self.aps.set_xlabel(**self.xlps)
        self.aps.set_ylabel(**self.ylps)

        if Bhv == 'Traj':

            niter=int(self.cFrame.stDico['n iter'].get())
            jb = self.cFrame.TrajJacob.get()
            if jb:
                lj = float(self.cFrame.TJDirlStr.get())
                hj = float(self.cFrame.TJDirhderStr.get())
            jnb = self.cFrame.nTrajJacob.get()
            if jnb:
                ljn = float(self.cFrame.nTJDirlStr.get())
                hjn = float(self.cFrame.nTJDirhderStr.get())

            v = np.array([event.xdata,event.ydata])
            s = [v]
            if jb: sj = [Jacob(v,hj,utils.dfridr)]
            if jnb: sjn = [Jacob(v,hjn,utils.dfridr)]
            for i in xrange(0,niter):
                u = pm.Map(v)
                s.append(u)
                v = u
                if jb: sj.append(Jacob(v,hj,utils.dfridr))
                if jnb: sjn.append(np.dot(sjn[-1],Jacob(v,hjn,utils.dfridr)))
            w = np.vstack(s)
            line = lines.Line2D(w[:,0],w[:,1],color='b')
            if jb:
                for i in xrange(len(sj)):
                    J = sj[i]
                    v = s[i]
                    (lr,vr) = eig(J,right=True)
                    if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0:
                        print 'Problem : The point '+str(i+1)+' is not hyperbolic'
                        print 'J=',J
                        print 'l=',lr
                    else:
                        if abs(lr[0]) < 1.:
                            u1 = vr[:,0]
                            u2 = vr[:,1]
                        else:
                            u1 = vr[:,1]
                            u2 = vr[:,0]
                        ul1 = np.vstack([v-lj*u1,v+lj*u1])
                        ul2 = np.vstack([v-lj*u2,v+lj*u2])
                        line1 = lines.Line2D(ul1[:,0],ul1[:,1],color='b')
                        line2 = lines.Line2D(ul2[:,0],ul2[:,1],color='r')
                        self.aps.add_line(line1)
                        self.aps.add_line(line2)
            if jnb:
                for i in xrange(len(sjn)):
                    J = sjn[i]
                    v = s[i]
                    (lr,vr) = eig(J,right=True)
                    if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0:
                        print 'Problem : The traj '+str(i+1)+' is not hyperbolic'
                        print 'J=',J
                        print 'l=',lr
                    else:
                        if abs(lr[0]) < 1.:
                            u1 = vr[:,0]
                            u2 = vr[:,1]
                        else:
                            u1 = vr[:,1]
                            u2 = vr[:,0]
                        ul1 = np.vstack([v-ljn*u1,v+ljn*u1])
                        ul2 = np.vstack([v-ljn*u2,v+ljn*u2])
                        line1 = lines.Line2D(ul1[:,0],ul1[:,1],color='g')
                        line2 = lines.Line2D(ul2[:,0],ul2[:,1],color='m')
                        self.aps.add_line(line1)
                        self.aps.add_line(line2)

        elif Bhv == '1it':
            v = np.array([event.xdata,event.ydata])
            u = pm.Map(v)
            w = np.vstack([v,u])
            line = lines.Line2D(w[:,0],w[:,1],
                                linestyle='None',
                                marker='+',
                                markersize=10.,
                                color='k')
        elif Bhv == 'Preim':

            xmin=float(self.cFrame.stDico['pixmin'].get())
            xmax=float(self.cFrame.stDico['pixmax'].get())
            pmin=float(self.cFrame.stDico['pipmin'].get())
            pmax=float(self.cFrame.stDico['pipmax'].get())
            nx=int(self.cFrame.stDico['pinx'].get())
            ny=int(self.cFrame.stDico['pinp'].get())
            tol=float(self.cFrame.stDico['pitol'].get())
            it=int(self.cFrame.stDico['piter'].get())
            al=float(self.cFrame.stDico['pialpha'].get())
            npim = self.cFrame.preimmVar.get()

            v = np.array([event.xdata,event.ydata])
            u = preMap(npim,v,xmin,xmax,pmin,pmax,nx,ny,tol,it,al)
            if u != None:
                w = np.vstack([v,u])
            else:
                w = v
                w.shape = 1,2
            line = lines.Line2D(w[:,0],w[:,1],
                                linestyle='None',
                                marker='+',
                                markersize=10.,
                                color='k')
        elif Bhv == 'Jacob':
            l = float(self.cFrame.DirlStr.get())
            h = float(self.cFrame.DirhderStr.get())
            v = np.array([event.xdata,event.ydata])
            J = Jacob(v,h,utils.dfridr)
            (lr,vr) = eig(J,right=True)
            if reduce(lambda x,y : (np.abs(x)-1.)*(np.abs(y)-1.),lr) >= 0:
                print 'Problem : The point is not hyperbolic'
                print 'J=',J
                print 'l=',lr
                return
            if abs(lr[0]) < 1.:
                u1 = vr[:,0]
                u2 = vr[:,1]
            else:
                u1 = vr[:,1]
                u2 = vr[:,0]
            ul1 = np.vstack([v-l*u1,v+l*u1])
            ul2 = np.vstack([v-l*u2,v+l*u2])
            line = lines.Line2D(ul1[:,0],ul1[:,1],color='b')
            line1 = lines.Line2D(ul2[:,0],ul2[:,1],color='r')
            self.aps.add_line(line1)

        self.aps.add_line(line)
# self.aps.set_title(self.tlps)
# self.aps.set_xlabel(**self.xlps)
# self.aps.set_ylabel(**self.ylps)
        self.aps.redraw_in_frame()
        self.canvasps.blit()

    def onpsrelease(self,event):
        self.press = False
        self.aps.clear()
# self.aps.cla()
        for l in self.psLin:
            self.aps.add_line(l)
        self.aps.set_title(self.tlps)
        self.aps.set_xlabel(**self.xlps)
        self.aps.set_ylabel(**self.ylps)
        self.aps.redraw_in_frame()
        self.canvasps.blit()
# end

I don't know if it is a bug or something else but thank you in advance if you can help me.

Jonathan

------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge
This is your chance to win up to $100,000 in prizes! For a limited time,
vendors submitting new applications to BlackBerry App World(TM) will have
the opportunity to enter the BlackBerry Developer Challenge. See full prize
details at: http://p.sf.net/sfu/blackberry