def getLabel(self, label):
     sols = parseS.parseS()
     #adjust maximum label/branch
     mbr = max([abs(d["BR"]) for d in self] or [None])
     mlab = max(self.getLabels() or [None])
     for d in self:
         sols.extend(d.getLabel(None, mbr=mbr, mlab=mlab))
     return sols(label)
def plots(sol, **kwargs):
    colors = ['b', 'g', 'r', 'c', 'm', 'y', 'k']
    fig = plt.figure()
    fig.clf()
    ax = fig.add_subplot(111)

    s = parseS.parseS(sol)

    if kwargs.get('xlim'):
        ax.set_xlim(kwargs.get('xlim'))
    if kwargs.get('ylim'):
        ax.set_ylim(kwargs.get('ylim'))

    if kwargs.get('x'):
        x = kwargs.get('x')
        numx = re.sub('\D', '', x)
        param = x.strip(numx)
        if param == 'U':
            paramx = 'U'
        if param == 't':
            paramx = 't'
    else:
        paramx = 't'

    if kwargs.get('y'):
        y = kwargs.get('y')
        numy = re.sub('\D', '', y)
        param = y.strip(numy)
        if param == 'U':
            paramy = 'U'
        if param == 't':
            paramy = 't'
    else:
        paramy = 'U'
        numy = 1

    x = []
    y = []

    for i in range(len(s)):
        sdata = s[i]
        if paramx == 't':
            xvalue = sdata['t']
        else:
            data = sdata['u']
            xvalue = sdata[int(numx) - 1]
        if paramy == 't':
            yvalue = sdata['t']
        else:
            data = sdata['u']
            yvalue = sdata[int(numy) - 1]

        x.append(xvalue)
        y.append(yvalue)

    ax.set_xlabel(paramx + '(' + numx + ')')
    ax.set_ylabel(paramy + '(' + numy + ')')
    ax.plot(x, y, color='k', ls='solid')
def plots(sol, **kwargs):
    colors=['b', 'g', 'r', 'c', 'm', 'y', 'k']
    fig=plt.figure()
    fig.clf()
    ax=fig.add_subplot(111)

    s=parseS.parseS(sol)

    if kwargs.get('xlim'):
        ax.set_xlim(kwargs.get('xlim'))
    if kwargs.get('ylim'):
        ax.set_ylim(kwargs.get('ylim'))   

    if kwargs.get('x'):
        x=kwargs.get('x')
        numx=re.sub('\D', '',x)
        param=x.strip(numx)
        if param=='U':
            paramx='U'
        if param=='t':
            paramx='t'
    else:
        paramx='t'

    if kwargs.get('y'):
        y=kwargs.get('y')
        numy=re.sub('\D', '',y)
        param=y.strip(numy)
        if param=='U':
            paramy='U'
        if param=='t':
            paramy='t'
    else:
        paramy='U'
        numy=1

    x=[]
    y=[]
    
    for i in range(len(s)):
        sdata=s[i]
        if paramx=='t':
            xvalue=sdata['t']
        else:
            data=sdata['u']
            xvalue=sdata[int(numx)-1]
        if paramy=='t':
            yvalue=sdata['t']
        else:
            data=sdata['u']
            yvalue=sdata[int(numy)-1]

        x.append(xvalue)
        y.append(yvalue)

    ax.set_xlabel(paramx+'('+numx+')')
    ax.set_ylabel(paramy+'('+numy+')')
    ax.plot(x,y,color='k',ls='solid')
Exemple #4
0
    def __init__(self, parent=None, cnf={}, **kw):

        optionDefaults = {}
        # The kind of diagram (single solution vs. bifur diagram)
        optionDefaults["type"] = ("bifurcation", self.__optionCallback)
        # The X column
        optionDefaults["bifurcation_x"] = ([0], self.__optionCallback)
        optionDefaults["solution_x"] = (["t"], self.__optionCallback)
        # The Y column
        optionDefaults["bifurcation_y"] = ([1], self.__optionCallback)
        optionDefaults["solution_y"] = ([0], self.__optionCallback)
        # Sets of labels that the user is likely to want to use
        optionDefaults["label_defaults"] = (None, self.__optionCallback)
        # Sets of columns that the user is likely to want to use
        optionDefaults["bifurcation_column_defaults"] = (None, self.__optionCallback)
        optionDefaults["solution_column_defaults"] = (None, self.__optionCallback)
        # The index of the solution we wish to draw
        optionDefaults["index"] = ([0], self.__optionCallback)
        # The label of the solution we wish to draw
        optionDefaults["label"] = ([0], self.__optionCallback)

        # Already parsed data structures
        optionDefaults["bifurcation_diagram"] = (parseB.parseB(), self.__optionCallback)
        optionDefaults["solution"] = (parseS.parseS(), self.__optionCallback)
        optionDefaults["bifurcation_diagram_filename"] = ("", self.__optionCallback)
        optionDefaults["solution_filename"] = ("", self.__optionCallback)
        optionDefaults["runner"] = (None, self.__optionCallback)
        optionDefaults["mark_t"] = (None, self.__optionCallback)

        optionDefaults["bifurcation_symbol"] = ("B", self.__optionCallback)
        optionDefaults["limit_point_symbol"] = ("L", self.__optionCallback)
        optionDefaults["hopf_symbol"] = ("H", self.__optionCallback)
        optionDefaults["period_doubling_symbol"] = ("D", self.__optionCallback)
        optionDefaults["torus_symbol"] = ("T", self.__optionCallback)
        optionDefaults["user_point_symbol"] = ("U", self.__optionCallback)
        optionDefaults["error_symbol"] = ("X", self.__optionCallback)
        optionDefaults["use_labels"] = (1, self.__optionCallback)

        parser = ConfigParser.ConfigParser()
        parser.add_section("AUTO_plotter")
        if os.path.exists(os.path.expandvars("$AUTO_DIR/.autorc")):
            parser.read(os.path.expandvars("$AUTO_DIR/.autorc"))
        if os.path.exists(os.path.expandvars("$HOME/.autorc")):
            parser.read(os.path.expandvars("$HOME/.autorc"))
        if os.path.exists("./.autorc"):
            parser.read("./.autorc")

        for option in parser.options("AUTO_plotter"):
            optionDefaults[option] = (eval(parser.get("AUTO_plotter", option)), self.__optionCallback)

        self.__needsPlot = None
        apply(grapher.GUIGrapher.__init__, (self, parent))

        dict = AUTOutil.cnfmerge((cnf, kw))
        self.addOptions(optionDefaults)
        plotter.config(self, dict)
Exemple #5
0
 def __init__(self,fort7_filename=None,fort8_filename=None):
     if (fort8_filename is None) and not(fort8_filename is None):
         raise AUTORuntimeError("Must set both both filenames")
     self.diagram = parseB.parseB()
     self.solution = parseS.parseS()
     self.dg = self.diagram
     self.sl = self.solution
     if not(fort7_filename is None):
         self.diagram.readFilename(fort7_filename)
         self.solution.readFilename(fort8_filename)
Exemple #6
0
 def __init__(self,
              fort7_filename=None,
              fort8_filename=None,
              fort9_filename=None):
     self.diagnostics = None
     if isinstance(fort7_filename, list):
         self.diagram = None
         self.solution = parseS.parseS(fort7_filename)
     elif fort8_filename is None and fort7_filename is not None:
         raise AUTOExceptions.AUTORuntimeError(
             "Must set both both filenames")
     elif isinstance(fort7_filename, str) or fort7_filename is None:
         self.diagram = parseB.parseB(fort7_filename)
         self.solution = parseS.parseS(fort8_filename)
         if not fort9_filename is None:
             self.diagnostics = parseD.parseD(fort9_filename)
     else:
         self.diagram = fort7_filename
         self.solution = fort8_filename
         self.diagnostics = fort9_filename
     if self.diagnostics is None:
         self.diagnostics = []
     self.dg = self.diagram
     self.sl = self.solution
 def getLabel(self, label, mbr=None, mlab=None):
     sols = []
     for idx in self.labels.getIndices():
         x = self._gettypelabel(idx)[1]
         if "solution" in x:
             br = abs(self["BR"])
             pt = idx % 9999 + 1
             lab = x["LAB"]
             ty = x["TY number"]
             sol = x["solution"]
             if (sol._mlab != mlab or sol._mbr != mbr or br != sol["BR"]
                     or pt != sol["PT"] or ty != sol["TY number"]
                     or lab != sol["LAB"]):
                 sol = sol.__class__(sol, BR=br, PT=pt, LAB=lab, TY=ty)
                 sol._mlab = mlab
                 sol._mbr = mbr
             sols.append(sol)
     return parseS.parseS(sols)(label)
 def readFilename(self,
                  fort7_filename,
                  fort8_filename=None,
                  fort9_filename=None):
     parseB.parseBR.readFilename(self, fort7_filename)
     for i, d in enumerate(self):
         self[i] = bifDiagBranch(d)
     if fort8_filename is not None and isinstance(fort8_filename, str):
         solution = parseS.parseS(fort8_filename)
         i = 0
         for d in self:
             for k, x in map(d._gettypelabel, d.labels.getIndices()):
                 if x.get("LAB", 0) != 0:
                     x["solution"] = solution[i]
                     i = i + 1
     if not fort9_filename is None:
         # for now just attach diagnostics information to the first branch
         self[0].diagnostics = parseD.parseD(fort9_filename)
 def read(self, fort7_input, fort8_input=None, fort9_input=None):
     parseB.parseBR.read(self, fort7_input)
     for i, d in enumerate(self):
         self[i] = bifDiagBranch(d)
     if fort8_input is not None and (isinstance(fort8_input,
                                                (file, gzip.GzipFile))):
         solution = parseS.parseS()
         solution.read(fort8_input)
         i = 0
         for d in self:
             for k, x in map(d._gettypelabel, d.labels.getIndices()):
                 if x.get("LAB", 0) != 0:
                     x["solution"] = solution[i]
                     i = i + 1
     if fort9_input is not None:
         diagnostics = parseD.parseD()
         diagnostics.read(fort9_input)
         # for now just attach diagnostics information to the first branch
         self[0].diagnostics = diagnostics
    def __init__(self,parent=None,**kw):

        optionDefaults = {}
        # The kind of diagram (single solution vs. bifur diagram)
        optionDefaults["type"]     = ("bifurcation",self.__optionCallback)  
        # The X column
        optionDefaults["bifurcation_x"] = ([0],self.__optionCallback)
        optionDefaults["solution_x"]    = ([-1],self.__optionCallback)
        # The Y column
        optionDefaults["bifurcation_y"] = ([1],self.__optionCallback)
        optionDefaults["solution_y"]    = ([0],self.__optionCallback)
        # The Z column
        optionDefaults["bifurcation_z"] = (None,self.__optionCallback)
        optionDefaults["solution_z"]    = (None,self.__optionCallback)
        # The coordinate names
        optionDefaults["bifurcation_coordnames"] = (None,self.__optionCallback)
        optionDefaults["solution_indepvarname"]  = (None,self.__optionCallback)
        optionDefaults["solution_coordnames"]    = (None,self.__optionCallback)
        optionDefaults["labelnames"]             = (None,self.__optionCallback)
        # Sets of labels that the user is likely to want to use
        optionDefaults["label_defaults"]   = (None,self.__optionCallback)
        # Sets of columns that the user is likely to want to use
        optionDefaults["bifurcation_column_defaults"]   = (None,self.__optionCallback)
        optionDefaults["solution_column_defaults"]   = (None,self.__optionCallback)
        # The index of the solution we wish to draw
        optionDefaults["index"]    = ([0],self.__optionCallback)
        # The label of the solution we wish to draw
        optionDefaults["label"]    = ([0],self.__optionCallback)

        # Already parsed data structures
        optionDefaults["bifurcation_diagram"]          = (parseB.parseB(),self.__optionCallback)
        optionDefaults["solution"]          = (parseS.parseS(),self.__optionCallback)
        optionDefaults["bifurcation_diagram_filename"] = ("",self.__optionCallback)
        optionDefaults["solution_filename"] = ("",self.__optionCallback)
        optionDefaults["runner"]         = (None,self.__optionCallback)
        optionDefaults["mark_t"]         = (None,self.__optionCallback)

        optionDefaults["letter_symbols"] = (True,self.__optionCallback)
        optionDefaults["bifurcation_symbol"]     = ("B",self.__optionCallback)
        optionDefaults["limit_point_symbol"]     = ("L",self.__optionCallback)
        optionDefaults["hopf_symbol"]            = ("H",self.__optionCallback)
        optionDefaults["zero_hopf_symbol"]       = ("ZH",self.__optionCallback)
        optionDefaults["bogdanov_takens_symbol"] = ("BT",self.__optionCallback)
        optionDefaults["cusp_symbol"]            = ("CP",self.__optionCallback)
        optionDefaults["generalized_hopf_symbol"]= ("GH",self.__optionCallback)
        optionDefaults["1_1_resonance_symbol"]   = ("R1",self.__optionCallback)
        optionDefaults["1_2_resonance_symbol"]   = ("R2",self.__optionCallback)
        optionDefaults["1_3_resonance_symbol"]   = ("R3",self.__optionCallback)
        optionDefaults["1_4_resonance_symbol"]   = ("R4",self.__optionCallback)
        optionDefaults["fold_flip_symbol"]       = ("LPD",self.__optionCallback)
        optionDefaults["fold_torus_symbol"]      = ("LTR",self.__optionCallback)
        optionDefaults["flip_torus_symbol"]      = ("PTR",self.__optionCallback)
        optionDefaults["torus_torus_symbol"]     = ("TTR",self.__optionCallback)
        optionDefaults["period_doubling_symbol"] = ("D",self.__optionCallback)
        optionDefaults["torus_symbol"]           = ("T",self.__optionCallback)
        optionDefaults["user_point_symbol"]      = ("U",self.__optionCallback)
        optionDefaults["error_symbol"]           = ("X",self.__optionCallback)

        optionDefaults["ps_colormode"]           = ("color",self.__optionCallback)
        optionDefaults["stability"]              = (False,self.__optionCallback)
        optionDefaults["coloring_method"]        = ("curve",self.__optionCallback)

        parser = AUTOutil.getAUTORC("AUTO_plotter")
        optionDefaultsRC = {}
        c = parseC.parseC()
        for option in parser.options("AUTO_plotter"):
            optionDefaultsRC[option] = self.parseoption(
                option,parser.get("AUTO_plotter",option),c)
        # Let these override the RC options, if specified.
        for key in ["hide","xlabel","ylabel","zlabel"]:
            if key in kw:
                optionDefaultsRC[key] = kw[key]

        self.__needsPlot = None
        grapher.GUIGrapher.__init__(self,parent,**optionDefaultsRC)

        self.addOptions(**optionDefaults)
        self.addRCOptions(**optionDefaultsRC)
        for options in [optionDefaultsRC, kw]:
            if "letter_symbols" in options:
                self.__optionCallback("letter_symbols",
                                      options["letter_symbols"], options)
                del options["letter_symbols"]
        plotter._configNoDraw(self,**optionDefaultsRC)
        plotter._configNoDraw(self,**kw)
        self._plotNoDraw()
        self.__needsPlot = None
        for coord in 'x', 'y', 'z':
            if "min"+coord not in kw or "max"+coord not in kw:
                self.computeRange(coord,kw.get("min"+coord),
                                  kw.get("max"+coord))
        grapher.GUIGrapher.plot(self)
 def __realinit(self, fort7_filename, fort8_filename, fort9_filename,
                constants):
     ioerrors = []
     try:
         parseB.parseBR.__init__(self, fort7_filename)
         for i, d in enumerate(self):
             self[i] = bifDiagBranch(d)
     except IOError:
         ioerrors.append(str(sys.exc_info()[1]))
         parseB.parseBR.__init__(self)
         fort7_filename = None
     if isinstance(fort8_filename, parseS.AUTOSolution):
         fort8_filename = [fort8_filename]
     try:
         solution = parseS.parseS(fort8_filename)
     except IOError:
         ioerrors.append(str(sys.exc_info()[1]))
         solution = None
         if fort7_filename is None:
             raise AUTOExceptions.AUTORuntimeError('\n'.join(ioerrors))
     if fort7_filename is None and fort8_filename is not None:
         # simulate a bifurcation diagram
         labels = {}
         for s in solution:
             br = s["Branch number"]
             if labels == {} or br != branch.BR:
                 if labels != {}:
                     branch.labels = Points.PointInfo(labels)
                 branch = bifDiagBranch()
                 self.append(branch)
                 branch.BR = br
                 branch.coordarray = []
                 branch.coordnames = []
                 branch.headernames = []
                 branch.headerlist = []
                 branch.c = constants
                 labels = {}
                 base = 0
                 i = 0
             pt = s["PT"]
             lab = s["LAB"]
             ty = s["TY number"]
             if i >= base + pt - 1:
                 # point numbers wrapped around
                 base += 9999
             i = base + pt - 1
             labels[i] = {s["TY"]: {"LAB": lab, "TY number": ty, "PT": pt}}
         if labels != {}:
             branch.labels = Points.PointInfo(labels)
     if fort9_filename is not None and self.data != []:
         try:
             # for now just attach diagnostics information to first branch
             self[0].diagnostics = parseD.parseD(fort9_filename)
         except IOError:
             pass
     i = 0
     if solution is not None:
         for d in self:
             if constants is None and d.c is not None:
                 constants = d.c
             constants = parseC.parseC(constants)
             for k in constants:
                 if k in self.nonekeys:
                     constants[k] = None
             for ind in d.labels.getIndices():
                 if i >= len(solution):
                     break
                 x = d._gettypelabel(ind)[1]
                 s = solution[i]
                 if x.get("LAB", 0) != 0 or s["LAB"] == 0:
                     i = i + 1
                     s = x["solution"] = parseS.AUTOSolution(
                         s, constants=constants)
                     if d.coordnames != []:
                         s.b = d[ind]
    def __init__(self,parent=None,cnf={},**kw):
        optionDefaults={}
        optionDefaults["problem"] = ("auto_plotter3d",self.__optionCallback)
        # The kind of diagram (single solution vs. bifur diagram)
        optionDefaults["type"]     = ("bifurcation",self.__optionCallback)  
        # The X column
        optionDefaults["bifurcation_x"]     = ([0],self.__optionCallback)
        optionDefaults["solution_x"]        = (["t"],self.__optionCallback)
        # The Y column
        optionDefaults["bifurcation_y"]     = ([1],self.__optionCallback)
        optionDefaults["solution_y"]        = ([0],self.__optionCallback)
        # The Z column
        optionDefaults["bifurcation_z"]     = ([1],self.__optionCallback)
        optionDefaults["solution_z"]        = ([0],self.__optionCallback)
        # The Color column
        optionDefaults["bifurcation_color"] = ([1],self.__optionCallback)
        optionDefaults["solution_color"]    = ([0],self.__optionCallback)
        # Sets of labels that the user is likely to want to use
        optionDefaults["label_defaults"]   = (None,self.__optionCallback)
        # Sets of columns that the user is likely to want to use
        optionDefaults["bifurcation_column_defaults"]   = (None,self.__optionCallback)
        optionDefaults["solution_column_defaults"]   = (None,self.__optionCallback)
        # The index of the solution we wish to draw
        optionDefaults["index"]    = ([0],self.__optionCallback)
        # The label of the solution we wish to draw
        optionDefaults["label"]    = ([0],self.__optionCallback)

        # Already parsed data structures
        optionDefaults["bifurcation_diagram"]          = (parseB.parseB(),self.__optionCallback)
        optionDefaults["solution"]          = (parseS.parseS(),self.__optionCallback)
        optionDefaults["bifurcation_diagram_filename"] = ("",self.__optionCallback)
        optionDefaults["solution_filename"] = ("",self.__optionCallback)
        optionDefaults["runner"]         = (None,self.__optionCallback)
        optionDefaults["mark_t"]         = (None, self.__optionCallback)
        optionDefaults["mark_t_radius"]  = (0.01, self.__optionCallback)
        optionDefaults["mark_t_color"]   = ((1.0,1.0,1.0), self.__optionCallback)


        # Options for the GUI
        optionDefaults["bifurcation_x_scale"]       = (1.0,None)
        optionDefaults["bifurcation_y_scale"]       = (1.0,None)
        optionDefaults["bifurcation_z_scale"]       = (1.0,None)
        optionDefaults["bifurcation_x_trans"]       = (0.0,None)
        optionDefaults["bifurcation_y_trans"]       = (0.0,None)
        optionDefaults["bifurcation_z_trans"]       = (0.0,None)
        optionDefaults["solution_x_scale"]       = (1.0,None)
        optionDefaults["solution_y_scale"]       = (1.0,None)
        optionDefaults["solution_z_scale"]       = (1.0,None)
        optionDefaults["solution_x_trans"]       = (0.0,None)
        optionDefaults["solution_y_trans"]       = (0.0,None)
        optionDefaults["solution_z_trans"]       = (0.0,None)

        optionDefaults["line_width"]        = (1.0,None)
        optionDefaults["cylinder"]     = (0,None)
        optionDefaults["geom_comp"]    = (7,None)
        optionDefaults["light_comp"]   = (7,None)
        optionDefaults["write_points_on"] = (0,None)

        optionDefaults["grid_on"]       = (0,None)
        optionDefaults["grid_lines"]    = (6,None)
        optionDefaults["grid_1_start"]  = (-1.0,None)
        optionDefaults["grid_2_start"]  = (-1.0,None)
        optionDefaults["grid_1_end"]    = (1.0,None)
        optionDefaults["grid_2_end"]    = (1.0,None)
        optionDefaults["grid_width"]    = (1.0,None)
        optionDefaults["grid_R"]        = (1.0,None)
        optionDefaults["grid_G"]        = (1.0,None)
        optionDefaults["grid_B"]        = (1.0,None)
        optionDefaults["grid_cylinder"] = (0,None)
        optionDefaults["grid_direction"]= (["x","y","z"],None)

        optionDefaults["cube_on"]    = (1,None)
        optionDefaults["cube_R"]     = (1.0,None)
        optionDefaults["cube_G"]     = (1.0,None)
        optionDefaults["cube_B"]     = (1.0,None)
        

        optionDefaults["auto_center"]= (1,None)
        optionDefaults["auto_scale"]= (1,None)

        parser = ConfigParser.ConfigParser()
        parser.add_section("AUTO_plotter3D")
        if(os.path.exists(os.path.expandvars("$AUTO_DIR/.autorc"))):
            parser.read(os.path.expandvars("$AUTO_DIR/.autorc"))
        if(os.path.exists(os.path.expandvars("$HOME/.autorc"))):
            parser.read(os.path.expandvars("$HOME/.autorc"))
        if(os.path.exists("./.autorc")):
            parser.read("./.autorc")

        for option in parser.options("AUTO_plotter3D"):
            optionDefaults[option] = (eval(parser.get("AUTO_plotter3D",option)),self.__optionCallback)


        Tkinter.Frame.__init__(self,parent)
        optionHandler.OptionHandler.__init__(self)

        self.user_data = {}

        dict = AUTOutil.cnfmerge((cnf,kw))
        self.addOptions(optionDefaults)
        plotter3D.config(self,dict)
    def __init__(self,parent=None,cnf={},**kw):
        optionDefaults={}
        optionDefaults["problem"] = ("auto_plotter3d",self.__optionCallback)
        # The kind of diagram (single solution vs. bifur diagram)
        optionDefaults["type"]     = ("bifurcation",self.__optionCallback)  
        # The X column
        optionDefaults["bifurcation_x"]     = ([0],self.__optionCallback)
        optionDefaults["solution_x"]        = (["t"],self.__optionCallback)
        # The Y column
        optionDefaults["bifurcation_y"]     = ([1],self.__optionCallback)
        optionDefaults["solution_y"]        = ([0],self.__optionCallback)
        # The Z column
        optionDefaults["bifurcation_z"]     = ([1],self.__optionCallback)
        optionDefaults["solution_z"]        = ([0],self.__optionCallback)
        # The Color column
        optionDefaults["bifurcation_color"] = ([1],self.__optionCallback)
        optionDefaults["solution_color"]    = ([0],self.__optionCallback)
        # Sets of labels that the user is likely to want to use
        optionDefaults["label_defaults"]   = (None,self.__optionCallback)
        # Sets of columns that the user is likely to want to use
        optionDefaults["bifurcation_column_defaults"]   = (None,self.__optionCallback)
        optionDefaults["solution_column_defaults"]   = (None,self.__optionCallback)
        # The index of the solution we wish to draw
        optionDefaults["index"]    = ([0],self.__optionCallback)
        # The label of the solution we wish to draw
        optionDefaults["label"]    = ([0],self.__optionCallback)

        # Already parsed data structures
        optionDefaults["bifurcation_diagram"]          = (parseB.parseB(),self.__optionCallback)
        optionDefaults["solution"]          = (parseS.parseS(),self.__optionCallback)
        optionDefaults["bifurcation_diagram_filename"] = ("",self.__optionCallback)
        optionDefaults["solution_filename"] = ("",self.__optionCallback)
        optionDefaults["runner"]         = (None,self.__optionCallback)
        optionDefaults["mark_t"]         = (None, self.__optionCallback)
        optionDefaults["mark_t_radius"]  = (0.01, self.__optionCallback)
        optionDefaults["mark_t_color"]   = ((1.0,1.0,1.0), self.__optionCallback)

        optionDefaults["special_point"]  = (None, self.__optionCallback)
        optionDefaults["special_point_radius"] = (0.005, self.__optionCallback)
        optionDefaults["special_point_colors"] = ([[0.0,0.0,1.0],  #Blue for branch point
                                                  [0.0,1.0,0.0],  #Green for fold
                                                  [1.0,1.0,0.0],  #Yellow for hopf
                                                  [0.0,1.0,1.0],  #Cyan for Period Doubling
                                                  [1.0,0.0,0.0],  #Red for Torus 
                                                  [0.5,0.5,0.5],  #Grey for user requested point
                                                  [0.1,0.1,0.1]], #Dark grey for error
                                                  self.__optionCallback)  

        # Options for the GUI
        optionDefaults["bifurcation_x_scale"]       = (1.0,None)
        optionDefaults["bifurcation_y_scale"]       = (1.0,None)
        optionDefaults["bifurcation_z_scale"]       = (1.0,None)
        optionDefaults["bifurcation_x_trans"]       = (0.0,None)
        optionDefaults["bifurcation_y_trans"]       = (0.0,None)
        optionDefaults["bifurcation_z_trans"]       = (0.0,None)
        optionDefaults["solution_x_scale"]       = (1.0,None)
        optionDefaults["solution_y_scale"]       = (1.0,None)
        optionDefaults["solution_z_scale"]       = (1.0,None)
        optionDefaults["solution_x_trans"]       = (0.0,None)
        optionDefaults["solution_y_trans"]       = (0.0,None)
        optionDefaults["solution_z_trans"]       = (0.0,None)

        optionDefaults["line_width"]        = (1.0,None)
        optionDefaults["cylinder"]     = (0,None)
        optionDefaults["geom_comp"]    = (7,None)
        optionDefaults["light_comp"]   = (7,None)
        optionDefaults["write_points_on"] = (0,None)

        optionDefaults["grid_on"]       = (0,None)
        optionDefaults["grid_lines"]    = (6,None)
        optionDefaults["grid_1_start"]  = (-1.0,None)
        optionDefaults["grid_2_start"]  = (-1.0,None)
        optionDefaults["grid_1_end"]    = (1.0,None)
        optionDefaults["grid_2_end"]    = (1.0,None)
        optionDefaults["grid_width"]    = (1.0,None)
        optionDefaults["grid_R"]        = (1.0,None)
        optionDefaults["grid_G"]        = (1.0,None)
        optionDefaults["grid_B"]        = (1.0,None)
        optionDefaults["grid_cylinder"] = (0,None)
        optionDefaults["grid_direction"]= (["x","y","z"],None)

        optionDefaults["cube_on"]    = (1,None)
        optionDefaults["cube_R"]     = (1.0,None)
        optionDefaults["cube_G"]     = (1.0,None)
        optionDefaults["cube_B"]     = (1.0,None)
        

        optionDefaults["auto_center"]= (1,None)
        optionDefaults["auto_scale"]= (1,None)

        parser = ConfigParser.ConfigParser()
        parser.add_section("AUTO_plotter3D")
        if(os.path.exists(os.path.expandvars("$AUTO_DIR/.autorc"))):
            parser.read(os.path.expandvars("$AUTO_DIR/.autorc"))
        if(os.path.exists(os.path.expandvars("$HOME/.autorc"))):
            parser.read(os.path.expandvars("$HOME/.autorc"))
        if(os.path.exists("./.autorc")):
            parser.read("./.autorc")

        for option in parser.options("AUTO_plotter3D"):
            optionDefaults[option] = (eval(parser.get("AUTO_plotter3D",option)),self.__optionCallback)

	geom.Geometry.__init__(self,parent)

        optionHandler.OptionHandler.__init__(self,geom.Geometry)

        self.user_data = {}

        dict = AUTOutil.cnfmerge((cnf,kw))
        self.addOptions(optionDefaults)
        self.set_problem(self.cget("problem"))
        plotter3D.config(self,dict)

	self.zoom_scale = 0.03
	self.default_zoom = -10.0
        self.bind('<Lock-ButtonPress-3>',self.zoom_mouse_down)
        self.bind('<Lock-Button3-Motion>',self.zoom_mouse_move)
	self.zoom(0.15)

        self.bind('<ButtonPress-3>',self.translate_mouse_down)
        self.bind('<Button3-Motion>',self.translate_mouse_move)
        self.bind('<Shift-ButtonPress-2>',self.zoom_mouse_down)
        self.bind('<Shift-Button2-Motion>',self.zoom_mouse_move)
        self.bind('<ButtonPress-2>',self.rotate_mouse_down)
        self.bind('<Button2-Motion>',self.rotate_mouse_move)
        self.bind('<ButtonRelease-2>',self.spin_mouse)

        self.tk_focusFollowsMouse()
        self.bind('<KeyPress-Up>',self.KeyEvent)
        self.bind('<KeyPress-Down>',self.KeyEvent)
        self.bind('<KeyPress-Left>',self.KeyEvent)
        self.bind('<KeyPress-Right>',self.KeyEvent)
        self.bind('<KeyPress-Next>',self.KeyEvent)
        self.bind('<KeyPress-Prior>',self.KeyEvent)

        self.bind('<Control-KeyPress-Up>',self.KeyEvent)
        self.bind('<Control-KeyPress-Down>',self.KeyEvent)
        self.bind('<Control-KeyPress-Left>',self.KeyEvent)
        self.bind('<Control-KeyPress-Right>',self.KeyEvent)
        self.bind('<Control-KeyPress-Next>',self.KeyEvent)
        self.bind('<Control-KeyPress-Prior>',self.KeyEvent)