Exemplo n.º 1
0
 def __init__(self, parameter, mtype=0):
     self.modeltype = mtype
     # check whether the parameter is an EmissionDomain
     if isinstance(parameter, ghmm.EmissionDomain):
         if parameter.CDataType is "int":
             self.HMM = ObjectHMM(State, Transition, alphabet=parameter, etype=0)
             self.modeltype |= ghmmwrapper.kDiscreteHMM
         elif parameter.CDataType is "double":
             self.HMM = ObjectHMM(State, Transition, emissionClass=ContinuousMixtureDistribution, etype=1)
             self.modeltype |= ghmmwrapper.kContinuousHMM
         else:
             raise ghmm.NoValidCDataType, "C data type " + str(parameter.CDataType) + " invalid."
         self.HMM.initHMM(self.modeltype)
     # Distribution parameter
     elif type(parameter) is type:
         self.HMM = ObjectHMM(State, Transition, emissionClass=parameter, etype=1)
         self.modeltype |= ghmmwrapper.kContinuousHMM
         self.HMM.initHMM(self.modeltype)
     # existing hidden markov model
     elif isinstance(parameter, ghmm.HMM):
         hmm = parameter
         self.HMM = ObjectHMM(State, Transition)
         if isinstance(hmm, ghmm.DiscreteEmissionHMM):
             self.modeltype = hmm.cmodel.model_type
             if hmm.cmodel.alphabet is None:
                 hmm.cmodel.alphabet = self.emissionDomain.toCstruct()
         else:
             self.modeltype = ghmmwrapper.ContinuousHMM
         self.HMM.initHMM(self.modeltype)
         self.HMM.buildFromCModel(hmm.cmodel)
     # filename
     elif isinstance(parameter, str) or isinstance(parameter, unicode):
         self.load(parameter)
     else:
         raise ghmm.UnknownInputType
Exemplo n.º 2
0
 def gaussr(self):
     l=len(self.plot_list)
     s1=string.atof(self.e1.get())
     s2=string.atof(self.e2.get())
     s3=string.atof(self.e3.get())
     self.create_new_fkt(ObjectHMM.NormalDensityTruncRight(mu=s1,sigma=s2,tail=s3,a=1.0,color=self.nextColor()))
     self.top.destroy()
Exemplo n.º 3
0
 def boxc(self):
     s1 = string.atof(self.e1.get())
     s2 = string.atof(self.e2.get())
     self.create_new_fkt(
         ObjectHMM.UniformDensity(start=s1,
                                  stop=s2,
                                  a=1 / math.fabs(s2 - s1),
                                  color=self.nextColor()))
     self.top.destroy()
Exemplo n.º 4
0
    def __init__(self, master=None):
        self.modeltype = 0;
        SAGraphEditor.__init__(self, master)

        self.cEdgeDefault   = '#888888'
        self.cLabelDefault  = 'black' #'#FF8000' # 230 215 0
        self.cVertexDefault = 'red' #'#007EE0' # 0 125 230
        self.SetTitle("HMMEd _VERSION_")
        
        self.G = ObjectHMM.ObjectHMM(ObjectHMM.State, ObjectHMM.Transition)
 def __init__(self, parameter, mtype=0):
     self.modeltype = mtype
     # check whether the parameter is an EmissionDomain
     if isinstance(parameter, ghmm.EmissionDomain):
         if parameter.CDataType is "int":
             self.HMM = ObjectHMM(State,
                                  Transition,
                                  alphabet=parameter,
                                  etype=0)
             self.modeltype |= ghmmwrapper.kDiscreteHMM
         elif parameter.CDataType is "double":
             self.HMM = ObjectHMM(
                 State,
                 Transition,
                 emissionClass=ContinuousMixtureDistribution,
                 etype=1)
             self.modeltype |= ghmmwrapper.kContinuousHMM
         else:
             raise ghmm.NoValidCDataType, "C data type " + str(
                 parameter.CDataType) + " invalid."
         self.HMM.initHMM(self.modeltype)
     # Distribution parameter
     elif type(parameter) is type:
         self.HMM = ObjectHMM(State,
                              Transition,
                              emissionClass=parameter,
                              etype=1)
         self.modeltype |= ghmmwrapper.kContinuousHMM
         self.HMM.initHMM(self.modeltype)
     # existing hidden markov model
     elif isinstance(parameter, ghmm.HMM):
         hmm = parameter
         self.HMM = ObjectHMM(State, Transition)
         if isinstance(hmm, ghmm.DiscreteEmissionHMM):
             self.modeltype = hmm.cmodel.model_type
             if hmm.cmodel.alphabet is None:
                 hmm.cmodel.alphabet = self.emissionDomain.toCstruct()
         else:
             self.modeltype = ghmmwrapper.ContinuousHMM
         self.HMM.initHMM(self.modeltype)
         self.HMM.buildFromCModel(hmm.cmodel)
     # filename
     elif isinstance(parameter, str) or isinstance(parameter, unicode):
         self.load(parameter)
     else:
         raise ghmm.UnknownInputType
Exemplo n.º 6
0
    def gauss(self):
        mu = string.atof(self.e1.get())
        sigma = string.atof(self.e2.get())

        if sigma <= 0:
            Tkinter.Label(self.label,
                          text="Error! sigma has to be greater than 0,",
                          foreground="red").grid(row=3, columnspan=2)
            self.label.pack()
            return

        self.create_new_fkt(
            ObjectHMM.NormalDensity(mu=mu,
                                    sigma=sigma,
                                    a=1.0,
                                    color=self.nextColor()))

        del self.label
        self.top.destroy()
Exemplo n.º 7
0
    def NewGraph(self):
        d = HMMTypeChooser(self.master)

        if d.etype == 'open':
            self.OpenGraph()
            return
        else:
            self.G = ObjectHMM.ObjectHMM(ObjectHMM.State, ObjectHMM.Transition, etype=d.etype)

        self.G.edit(self)

        self.graphName = "New"
        self.ShowGraph(self.G, self.graphName)
        #self.RegisterGraphInformer(HMMInformer(self.G))
        self.fileName = None
        self.SetTitle("HMMEd _VERSION_")
        self.modeltype = self.G.modelType
        self.makeMenuBar()
        self.SetGraphMenuOptions()
Exemplo n.º 8
0
class HMMEditingContext(object):
    def __init__(self, parameter, mtype=0):
        self.modeltype = mtype
        # check whether the parameter is an EmissionDomain
        if isinstance(parameter, ghmm.EmissionDomain):
            if parameter.CDataType is "int":
                self.HMM = ObjectHMM(State, Transition, alphabet=parameter, etype=0)
                self.modeltype |= ghmmwrapper.kDiscreteHMM
            elif parameter.CDataType is "double":
                self.HMM = ObjectHMM(State, Transition, emissionClass=ContinuousMixtureDistribution, etype=1)
                self.modeltype |= ghmmwrapper.kContinuousHMM
            else:
                raise ghmm.NoValidCDataType, "C data type " + str(parameter.CDataType) + " invalid."
            self.HMM.initHMM(self.modeltype)
        # Distribution parameter
        elif type(parameter) is type:
            self.HMM = ObjectHMM(State, Transition, emissionClass=parameter, etype=1)
            self.modeltype |= ghmmwrapper.kContinuousHMM
            self.HMM.initHMM(self.modeltype)
        # existing hidden markov model
        elif isinstance(parameter, ghmm.HMM):
            hmm = parameter
            self.HMM = ObjectHMM(State, Transition)
            if isinstance(hmm, ghmm.DiscreteEmissionHMM):
                self.modeltype = hmm.cmodel.model_type
                if hmm.cmodel.alphabet is None:
                    hmm.cmodel.alphabet = self.emissionDomain.toCstruct()
            else:
                self.modeltype = ghmmwrapper.ContinuousHMM
            self.HMM.initHMM(self.modeltype)
            self.HMM.buildFromCModel(hmm.cmodel)
        # filename
        elif isinstance(parameter, str) or isinstance(parameter, unicode):
            self.load(parameter)
        else:
            raise ghmm.UnknownInputType

    def __str__(self):
        return str(self.HMM)

    ## container emulation
    def __getitem__(self, key):
        if isinstance(key, tuple):
            tail,head = [self.getUniqueId(k) for k in key]
            return self.HMM.edges[(tail,head)]
        elif isinstance(key, int):
            return self.HMM.vertices[key]
        else:
            retlist = [self.HMM.vertices[vid] for vid in self.HMM.name2id[key]]
            if len(retlist) == 1:
                return retlist[0]
            else:
                return retlist

    def __setitem__(self, key, value):
        pass

    def __delitem__(self, key):
        if isinstance(key, tuple):
            tail,head = [self.getUniqueId(k) for k in key]
            self.HMM.DeleteEdge(tail, head)
        elif isinstance(key, int):
            self.deleteState(key)
        else:
            for vid in self.HMM.name2id[key]:
                self.deleteState(vid)

    def __len__(self):
        return len(self.HMM)

    def __contains__(self, key):
        if isinstance(key, tuple):
            tail,head = [self.getUniqueId(k) for k in key]
            return self.HMM.edges.has_key((tail,head))
        elif isinstance(key, int):
            return self.HMM.vertices.has_key(key)
        else:
            return self.HMM.name2id.has_key(key)

    def __iter__(self):
        pass


    def load(self, filename):
        self.HMM = ObjectHMM(State, Transition)
        self.HMM.openXML(filename)
        self.modeltype = self.HMM.modelType


    def save(self, filename):
        self.HMM.writeXML(filename)


    def finalize(self):
        cmodel = self.HMM.finalize()
        
        if (self.modeltype & ghmmwrapper.kContinuousHMM):
            return ghmm.ContinuousMixtureHMM(ghmm.Float(),
                                             ghmm.ContinuousMixtureDistribution(ghmm.Float()),
                                             cmodel)

        elif ((self.modeltype & ghmmwrapper.kDiscreteHMM)
              and not (self.modeltype & ghmmwrapper.kTransitionClasses)
              and not (self.modeltype & ghmmwrapper.kPairHMM)):
            emission_domain = ghmm.Alphabet([], cmodel.alphabet)
            if (self.modeltype & ghmmwrapper.kLabeledStates):
                labelDomain = ghmm.LabelDomain([], cmodel.label_alphabet)
                return ghmm.StateLabelHMM(emission_domain,
                                          ghmm.DiscreteDistribution(emission_domain),
                                          labelDomain,
                                          cmodel)

            else:
                return ghmm.DiscreteEmissionHMM(emission_domain,
                                                ghmm.DiscreteDistribution(emission_domain),
                                                cmodel)


    def addState(self, emission=None, initial=-1):
        vid = self.HMM.AddVertex()
        if emission is not None:
            self.HMM.vertices[vid].emission = emission

        self.HMM.vertices[vid].initial = initial
        return vid

    def deleteState(self, vid):
        self.HMM.DeleteVertex(vid)
        
    def addTransition(self, tail, head, p=-1):
        tail = self.getUniqueId(tail)
        head = self.getUniqueId(head)
        
        self.HMM.AddEdge(tail, head)
        self.HMM.edges[tail,head].SetWeight(p)

    def getUniqueId(self, name):
        if isinstance(name, str) or isinstance(name, unicode):
            tmp = self.HMM.name2id[name]
            if len(tmp) > 1:
                raise IdentifierIsAmbigious, name
            else:
                return tmp[0]
        else:
            return name
Exemplo n.º 9
0
 def load(self, filename):
     self.HMM = ObjectHMM(State, Transition)
     self.HMM.openXML(filename)
     self.modeltype = self.HMM.modelType
class HMMEditingContext(object):
    def __init__(self, parameter, mtype=0):
        self.modeltype = mtype
        # check whether the parameter is an EmissionDomain
        if isinstance(parameter, ghmm.EmissionDomain):
            if parameter.CDataType is "int":
                self.HMM = ObjectHMM(State,
                                     Transition,
                                     alphabet=parameter,
                                     etype=0)
                self.modeltype |= ghmmwrapper.kDiscreteHMM
            elif parameter.CDataType is "double":
                self.HMM = ObjectHMM(
                    State,
                    Transition,
                    emissionClass=ContinuousMixtureDistribution,
                    etype=1)
                self.modeltype |= ghmmwrapper.kContinuousHMM
            else:
                raise ghmm.NoValidCDataType, "C data type " + str(
                    parameter.CDataType) + " invalid."
            self.HMM.initHMM(self.modeltype)
        # Distribution parameter
        elif type(parameter) is type:
            self.HMM = ObjectHMM(State,
                                 Transition,
                                 emissionClass=parameter,
                                 etype=1)
            self.modeltype |= ghmmwrapper.kContinuousHMM
            self.HMM.initHMM(self.modeltype)
        # existing hidden markov model
        elif isinstance(parameter, ghmm.HMM):
            hmm = parameter
            self.HMM = ObjectHMM(State, Transition)
            if isinstance(hmm, ghmm.DiscreteEmissionHMM):
                self.modeltype = hmm.cmodel.model_type
                if hmm.cmodel.alphabet is None:
                    hmm.cmodel.alphabet = self.emissionDomain.toCstruct()
            else:
                self.modeltype = ghmmwrapper.ContinuousHMM
            self.HMM.initHMM(self.modeltype)
            self.HMM.buildFromCModel(hmm.cmodel)
        # filename
        elif isinstance(parameter, str) or isinstance(parameter, unicode):
            self.load(parameter)
        else:
            raise ghmm.UnknownInputType

    def __str__(self):
        return str(self.HMM)

    ## container emulation
    def __getitem__(self, key):
        if isinstance(key, tuple):
            tail, head = [self.getUniqueId(k) for k in key]
            return self.HMM.edges[(tail, head)]
        elif isinstance(key, int):
            return self.HMM.vertices[key]
        else:
            retlist = [self.HMM.vertices[vid] for vid in self.HMM.name2id[key]]
            if len(retlist) == 1:
                return retlist[0]
            else:
                return retlist

    def __setitem__(self, key, value):
        pass

    def __delitem__(self, key):
        if isinstance(key, tuple):
            tail, head = [self.getUniqueId(k) for k in key]
            self.HMM.DeleteEdge(tail, head)
        elif isinstance(key, int):
            self.deleteState(key)
        else:
            for vid in self.HMM.name2id[key]:
                self.deleteState(vid)

    def __len__(self):
        return len(self.HMM)

    def __contains__(self, key):
        if isinstance(key, tuple):
            tail, head = [self.getUniqueId(k) for k in key]
            return self.HMM.edges.has_key((tail, head))
        elif isinstance(key, int):
            return self.HMM.vertices.has_key(key)
        else:
            return self.HMM.name2id.has_key(key)

    def __iter__(self):
        pass

    def load(self, filename):
        self.HMM = ObjectHMM(State, Transition)
        self.HMM.openXML(filename)
        self.modeltype = self.HMM.modelType

    def save(self, filename):
        self.HMM.writeXML(filename)

    def finalize(self):
        cmodel = self.HMM.finalize()

        if (self.modeltype & ghmmwrapper.kContinuousHMM):
            return ghmm.ContinuousMixtureHMM(
                ghmm.Float(), ghmm.ContinuousMixtureDistribution(ghmm.Float()),
                cmodel)

        elif ((self.modeltype & ghmmwrapper.kDiscreteHMM)
              and not (self.modeltype & ghmmwrapper.kTransitionClasses)
              and not (self.modeltype & ghmmwrapper.kPairHMM)):
            emission_domain = ghmm.Alphabet([], cmodel.alphabet)
            if (self.modeltype & ghmmwrapper.kLabeledStates):
                labelDomain = ghmm.LabelDomain([], cmodel.label_alphabet)
                return ghmm.StateLabelHMM(
                    emission_domain,
                    ghmm.DiscreteDistribution(emission_domain), labelDomain,
                    cmodel)

            else:
                return ghmm.DiscreteEmissionHMM(
                    emission_domain,
                    ghmm.DiscreteDistribution(emission_domain), cmodel)

    def addState(self, emission=None, initial=-1):
        vid = self.HMM.AddVertex()
        if emission is not None:
            self.HMM.vertices[vid].emission = emission

        self.HMM.vertices[vid].initial = initial
        return vid

    def deleteState(self, vid):
        self.HMM.DeleteVertex(vid)

    def addTransition(self, tail, head, p=-1):
        tail = self.getUniqueId(tail)
        head = self.getUniqueId(head)

        self.HMM.AddEdge(tail, head)
        self.HMM.edges[tail, head].SetWeight(p)

    def getUniqueId(self, name):
        if isinstance(name, str) or isinstance(name, unicode):
            tmp = self.HMM.name2id[name]
            if len(tmp) > 1:
                raise IdentifierIsAmbigious, name
            else:
                return tmp[0]
        else:
            return name
 def load(self, filename):
     self.HMM = ObjectHMM(State, Transition)
     self.HMM.openXML(filename)
     self.modeltype = self.HMM.modelType