def _save_SFTransducer(tr, io): io.write("@Transducer ") for s in tr.Final: io.write("{0:>s} ".format(statePP(tr.States[s]))) io.write("* ") for s in tr.Initial: io.write("{0:>s} ".format(statePP(fa.States[s]))) io.write("\n") for sin in tr.delta: for syin in tr.delta[sin]: for (syout, sout) in tr.delta[sin][syin]: io.write("{0:>s} {1:>s} {2:>s} {3:>s}\n".format(statePP(tr.States[sin]), str(syin), str(syout), statePP(tr.States[sout]))) io.write("\n")
def _save_SFTransducer(tr, io): io.write("@Transducer ") for s in tr.Final: io.write("{0:>s} ".format(statePP(tr.States[s]))) io.write("* ") for s in tr.Initial: io.write("{0:>s} ".format(statePP(fa.States[s]))) io.write("\n") for sin in tr.delta: for syin in tr.delta[sin]: for (syout, sout) in tr.delta[sin][syin]: io.write("{0:>s} {1:>s} {2:>s} {3:>s}\n".format( statePP(tr.States[sin]), str(syin), str(syout), statePP(tr.States[sout]))) io.write("\n")
def _saveFA(aut, io): if isinstance(aut, DFA): io.write("@DFA ") NFAp = False elif isinstance(aut, NFA): io.write("@NFA ") NFAp = True else: raise common.DFAerror() if not NFAp and aut.Initial != 0: foo = {0: aut.Initial, aut.Initial: 0} aut.reorder(foo) for sf in aut.Final: io.write("{0:>s} ".format(statePP(aut.States[sf]))) if NFAp: io.write(" * ") for sf in aut.Initial: io.write("{0:>s} ".format(statePP(aut.States[sf]))) io.write("\n") for s in xrange(len(aut.States)): if s in aut.delta: for a in aut.delta[s].keys(): if isinstance(aut.delta[s][a], set): for s1 in aut.delta[s][a]: io.write("{0:>s} {1:>s} {2:>}\n".format( statePP(aut.States[s]), str(a), statePP(aut.States[s1]))) else: io.write("{0:>s} {1:>s} {2:>s}\n".format( statePP(aut.States[s]), str(a), statePP(aut.States[aut.delta[s][a]]))) else: io.write("{0:>s} \n".format(statePP(aut.States[s])))
def _saveFA(aut, io): if isinstance(aut, DFA): io.write("@DFA ") NFAp = False elif isinstance(aut, NFA): io.write("@NFA ") NFAp = True else: raise common.DFAerror() if not NFAp and aut.Initial != 0: foo = {0: aut.Initial, aut.Initial: 0} aut.reorder(foo) for sf in aut.Final: io.write("{0:>s} ".format(statePP(aut.States[sf]))) if NFAp: io.write(" * ") for sf in aut.Initial: io.write("{0:>s} ".format(statePP(aut.States[sf]))) io.write("\n") for s in xrange(len(aut.States)): if s in aut.delta: for a in aut.delta[s].keys(): if isinstance(aut.delta[s][a], set): for s1 in aut.delta[s][a]: io.write("{0:>s} {1:>s} {2:>}\n".format(statePP(aut.States[s]), str(a), statePP(aut.States[s1]))) else: io.write("{0:>s} {1:>s} {2:>s}\n".format(statePP(aut.States[s]), str(a), statePP(aut.States[aut.delta[s][a]]))) else: io.write("{0:>s} \n".format(statePP(aut.States[s])))
def _save_SFTransducer(tr): """Writes transducer to a file :param tr: the transducer :type tr: Transducer""" f.write("@Transducer ") for s in tr.Final: f.write("{0:>s} ".format(statePP(tr.States[s]))) f.write("* ") for s in tr.Initial: f.write("{0:>s} ".format(statePP(fa.States[s]))) f.write("\n") for sin in tr.delta: for syin in tr.delta[sin]: for (syout, sout) in tr.delta[sin][syin]: f.write("{0:>s} {1:>s} {2:>s} {3:>s}\n".format(statePP(tr.States[sin]), str(syin), str(syout), statePP(tr.States[sout]))) f.write("\n")
def _save_SFTransducer(tr): """Writes transducer to a file :param tr: the transducer :type tr: Transducer""" f.write("@Transducer ") for s in tr.Final: f.write("{0:>s} ".format(statePP(tr.States[s]))) f.write("* ") for s in tr.Initial: f.write("{0:>s} ".format(statePP(fa.States[s]))) f.write("\n") for sin in tr.delta: for syin in tr.delta[sin]: for (syout, sout) in tr.delta[sin][syin]: f.write("{0:>s} {1:>s} {2:>s} {3:>s}\n".format( statePP(tr.States[sin]), str(syin), str(syout), statePP(tr.States[sout]))) f.write("\n")
def _saveFA(aut): """Writes one fa to a file :param aut: the automaton :type aut: FA or list""" if isinstance(aut, DFA): f.write("@DFA ") NFAp = False elif isinstance(aut, NFA): f.write("@NFA ") NFAp = True else: raise DFAerror() if not NFAp and aut.Initial != 0: foo = {0: aut.Initial, aut.Initial: 0} aut.reorder(foo) for sf in aut.Final: f.write("{0:>s} ".format(statePP(aut.States[sf]))) if NFAp: f.write(" * ") for sf in aut.Initial: f.write("{0:>s} ".format(statePP(aut.States[sf]))) f.write("\n") for s in xrange(len(aut.States)): if s in aut.delta: for a in aut.delta[s].keys(): if isinstance(aut.delta[s][a], set): for s1 in aut.delta[s][a]: f.write( "{0:>s} {1:>s} {2:>}\n".format(statePP(aut.States[s]), str(a), statePP(aut.States[s1]))) else: f.write("{0:>s} {1:>s} {2:>s}\n".format(statePP(aut.States[s]), str(a), statePP(aut.States[aut.delta[s][a]]))) else: f.write("{0:>s} \n".format(statePP(aut.States[s])))
def _saveFA(aut): """Writes one fa to a file :param aut: the automaton :type aut: FA or list""" if isinstance(aut, DFA): f.write("@DFA ") NFAp = False elif isinstance(aut, NFA): f.write("@NFA ") NFAp = True else: raise DFAerror() if not NFAp and aut.Initial != 0: foo = {0: aut.Initial, aut.Initial: 0} aut.reorder(foo) for sf in aut.Final: f.write("{0:>s} ".format(statePP(aut.States[sf]))) if NFAp: f.write(" * ") for sf in aut.Initial: f.write("{0:>s} ".format(statePP(aut.States[sf]))) f.write("\n") for s in xrange(len(aut.States)): if s in aut.delta: for a in aut.delta[s].keys(): if isinstance(aut.delta[s][a], set): for s1 in aut.delta[s][a]: f.write("{0:>s} {1:>s} {2:>}\n".format( statePP(aut.States[s]), str(a), statePP(aut.States[s1]))) else: f.write("{0:>s} {1:>s} {2:>s}\n".format( statePP(aut.States[s]), str(a), statePP(aut.States[aut.delta[s][a]]))) else: f.write("{0:>s} \n".format(statePP(aut.States[s])))
def toJson(aut): """ Json for a FA :param fa: :return: """ io = cStringIO.StringIO() if isinstance(aut, DFA): jtype = "DFA" elif isinstance(aut, NFA): jtype = "NFA" elif isinstance(aut, Transducer): jtype = "Transducer" elif isinstance(aut, ADFA): jtype = "ADFA" io.write("{ \"automaton\": {\n\t\"title\": \"\", \n\t\"version\": \"\",\n") io.write("\t\"type\": \"{0:>s}\",\n".format(jtype)) io.write("\t\"states\": [\n") sn = 0 for s in xrange(len(aut.States)): if sn == 0: io.write("{ \n") else: io.write(",\n{ \n") io.write("\t\t\"name\": \"{0:>s}\",\n".format(str(s))) io.write("\t\t\"label\": \"{0:>s}\",\n".format(statePP(aut.States[s]))) io.write("\t\t\"output\": \"\",\n") if aut.initialP(s): io.write("\t\t\"initial\": true,\n") else: io.write("\t\t\"initial\":false,\n") if aut.finalP(s): io.write("\t\t\"final\": true\n") else: io.write("\t\t\"final\": false\n") io.write("}") sn += 1 io.write("], \n") io.write("\t\"trans\": [\n") trn = 0 for s in xrange(len(aut.States)): if s in aut.delta: for a in aut.delta[s].keys(): if isinstance(aut.delta[s][a], set): for s1 in aut.delta[s][a]: if trn == 0: io.write("{ \n") else: io.write(",\n{ \n") io.write("\t\t\"name\": \"{0:>s}\,\n".format(str(trn))) io.write("\t\t\"orig_name\": \"{0:>s}\,\n".format( statePP(aut.States[s]))) io.write("\t\t\"dest_name\": \"{0:>s}\",\n".format( statePP(aut.States[s1]))) io.write("\t\t\"label\": \"{0:>s}\",\n".format( str(a))), io.write("\t\t\"weight\": \"\"\n") io.write("}") trn += 1 else: if trn == 0: io.write("{ \n") else: io.write(",\n{ \n") # io.write(", \n{ \n") io.write("\t\t\"name\": \"{0:>s}\",\n".format(str(trn))) io.write("\t\t\"orig_name\": \"{0:>s}\",\n".format( statePP(aut.States[s]))) io.write("\t\t\"dest_name\": \"{0:>s}\",\n".format( statePP(aut.States[aut.delta[s][a]]))) io.write("\t\t\"label\": \"{0:>s}\",\n".format(str(a))), io.write("\t\t\"weight\": \"\"\n") io.write("}") trn += 1 io.write("],\n") io.write("\t\"alphabet\": {0:>s} \n".format(alphabetPP(aut.Sigma))) io.write(" } ") return io.getvalue()
def toJson(aut): """ Json for a FA :param fa: :return: """ io = cStringIO.StringIO() if isinstance(aut, DFA): jtype="DFA" elif isinstance(aut, NFA): jtype="NFA" elif isinstance(aut, Transducer): jtype="Transducer" elif isinstance(aut, ADFA): jtype="ADFA" io.write("{ \"automaton\": {\n\t\"title\": \"\", \n\t\"version\": \"\",\n") io.write("\t\"type\": \"{0:>s}\",\n".format(jtype)) io.write("\t\"states\": [\n") sn = 0 for s in xrange(len(aut.States)): if sn ==0: io.write("{ \n") else: io.write(",\n{ \n") io.write("\t\t\"name\": \"{0:>s}\",\n".format(str(s))) io.write("\t\t\"label\": \"{0:>s}\",\n".format(statePP(aut.States[s]))) io.write("\t\t\"output\": \"\",\n") if aut.initialP(s): io.write("\t\t\"initial\": true,\n") else: io.write("\t\t\"initial\":false,\n") if aut.finalP(s): io.write("\t\t\"final\": true\n") else: io.write("\t\t\"final\": false\n") io.write("}") sn += 1 io.write("], \n") io.write("\t\"trans\": [\n") trn = 0 for s in xrange(len(aut.States)): if s in aut.delta: for a in aut.delta[s].keys(): if isinstance(aut.delta[s][a], set): for s1 in aut.delta[s][a]: if trn == 0 : io.write("{ \n") else: io.write(",\n{ \n") io.write("\t\t\"name\": \"{0:>s}\,\n".format(str(trn))) io.write("\t\t\"orig_name\": \"{0:>s}\,\n".format(statePP(aut.States[s]))) io.write("\t\t\"dest_name\": \"{0:>s}\",\n".format(statePP(aut.States[s1]))) io.write("\t\t\"label\": \"{0:>s}\",\n".format(str(a))), io.write("\t\t\"weight\": \"\"\n") io.write("}") trn += 1 else: if trn == 0 : io.write("{ \n") else: io.write(",\n{ \n") #io.write(", \n{ \n") io.write("\t\t\"name\": \"{0:>s}\",\n".format(str(trn))) io.write("\t\t\"orig_name\": \"{0:>s}\",\n".format(statePP(aut.States[s]))) io.write("\t\t\"dest_name\": \"{0:>s}\",\n".format(statePP(aut.States[aut.delta[s][a]]))) io.write("\t\t\"label\": \"{0:>s}\",\n".format(str(a))), io.write("\t\t\"weight\": \"\"\n") io.write("}") trn +=1 io.write("],\n") io.write("\t\"alphabet\": {0:>s} \n".format(alphabetPP(aut.Sigma))) io.write(" } ") return io.getvalue()