| |
|
|||||||
|
|
||||||||
|
Tutorial: 3_regular.pyTo run the below Python script, cd to the tutorial section of the respective plug-in and enter python3 3_regular.py at the command prompt. The script will read input data from ./tutorial/data/. ## Test/demonstrate core faudes generator functions ## import our module import faudes ## ########################################## ## Deterministic ## ########################################## ## Announce print("################# Deterministic"); ## Convert nondeterministic generator deter_nondet = faudes.Generator("data/deterministic_nondet.gen"); deter_det = faudes.Generator(); faudes.Deterministic(deter_nondet,deter_det); ## Report deter_nondet.Write(); deter_det.Write(); ## Record test case faudes.TestDump("deterministic",deter_det) ## ########################################## ## State Minimisation ## ########################################## ## Announce print("################# State Minimisation"); ## Convert non minimal generator minimal_nonmin = faudes.Generator("data/minimal_nonmin.gen"); minimal_min = faudes.Generator(); faudes.StateMin(minimal_nonmin,minimal_min); ## Report minimal_nonmin.Write(); minimal_min.Write(); ## Record test case faudes.TestDump("statemin",minimal_min) ## ########################################## ## Natural Projection ## ########################################## ## Announce print("################# Projection"); project_g = faudes.Generator("data/project_g.gen"); project_prog = faudes.Generator(); alph_proj = faudes.EventSet(); alph_proj.Insert("a"); alph_proj.Insert("c"); alph_proj.Insert("e"); alph_proj.Insert("g"); faudes.Project(project_g,alph_proj,project_prog); ## Report project_g.Write(); alph_proj.Write(); project_prog.Write(); ## Record test case faudes.TestDump("project",project_prog) ## ########################################## ## Boolean Operations ## ########################################## ## Announce print("################# Boolean Operations"); ## Union boolean_g1 = faudes.Generator("data/boolean_g1.gen"); boolean_g2 = faudes.Generator("data/boolean_g2.gen"); boolean_union = faudes.Generator(); boolean_union.StateNamesEnabled(False); faudes.LanguageUnion(boolean_g1, boolean_g2, boolean_union); ## Intersection boolean_intersection = faudes.Generator(); boolean_intersection.StateNamesEnabled(False); faudes.LanguageIntersection(boolean_g1, boolean_g2, boolean_intersection); ## Test: perform complement twice boolean_complement_g1=faudes.Generator(boolean_g1); boolean_complement_g1.StateNamesEnabled(False); faudes.LanguageComplement(boolean_complement_g1); boolean_complement2_g1=faudes.Generator(boolean_complement_g1); faudes.LanguageComplement(boolean_complement2_g1); ## Write results boolean_g1.Write("tmp_boolean_g1.gen"); boolean_g2.Write("tmp_boolean_g2.gen"); boolean_union.Write("tmp_union_g1g2.gen"); boolean_intersection.Write("tmp_intersection_g1g2.gen"); boolean_complement_g1.Write("tmp_complement_g1.gen"); boolean_complement2_g1.Write("tmp_complement2_g1.gen"); ## Record test case faudes.TestDump("lang. union",boolean_union) faudes.TestDump("lang. intersection",boolean_intersection) faudes.TestDump("lang. complement",boolean_complement_g1) faudes.TestDump("lang. complement2",boolean_complement2_g1) ## Inspect on console print("################# Results:"); boolean_union.DWrite(); boolean_intersection.DWrite(); boolean_complement_g1.DWrite(); ## Compare languages print("################# Compare:"); if faudes.LanguageInclusion(boolean_g1,boolean_union): print("Lm(g1) <= Lm(g1) v Lm(g2) : OK"); else: print("Lm(g1) > Lm(g1) v Lm(g2) : ERR"); if faudes.LanguageDisjoint(boolean_complement_g1,boolean_g1): print("Lm(g1) ^ ~Lm(g1) = empty : OK"); else: print("(Lm(g1) v Lm(g2)) ^ ~(Lm(g1) v Lm(g2)) != empty : ERR"); if faudes.LanguageEquality(boolean_g1,boolean_complement2_g1): print("Lm(g1) = ~~Lm(g1) : OK"); else: print("Lm(g1) != ~~Lm(g1) : ERR"); ## Record test case faudes.TestDump("lang. inclusion",faudes.LanguageInclusion(boolean_g1,boolean_union)) faudes.TestDump("lang. disjoint",faudes.LanguageDisjoint(boolean_complement_g1,boolean_g1)) faudes.TestDump("lang. equality",faudes.LanguageEquality(boolean_g1,boolean_complement2_g1)) ## ########################################## ## Concatenation/Kleene-Closure ## ########################################## ## Announce print("################# Concatenation/Kleene-Closure"); ## Read K and L concat_gk = faudes.Generator("data/concat_gk.gen") concat_gl = faudes.Generator("data/concat_gl.gen") ## Version 1: std functions concat_k_l_star_1 = faudes.Generator(concat_gl) faudes.KleeneClosure(concat_k_l_star_1) faudes.LanguageConcatenate(concat_gk,concat_k_l_star_1,concat_k_l_star_1) faudes.StateMin(concat_k_l_star_1,concat_k_l_star_1) ## Version 2: use non-deterministic intermediate results, disable state names concat_k_l_star_2 = faudes.Generator(concat_gl); concat_k_l_star_2.StateNamesEnabled(False); faudes.KleeneClosureNonDet(concat_k_l_star_2); faudes.LanguageConcatenateNonDet(concat_gk,concat_k_l_star_2,concat_k_l_star_2) faudes.Deterministic(concat_k_l_star_2,concat_k_l_star_2) faudes.StateMin(concat_k_l_star_2,concat_k_l_star_2) ## Compare results concat_ok = faudes.LanguageEquality(concat_k_l_star_1,concat_k_l_star_2) ## Inspect on console print("################# Results:"); concat_k_l_star_1.SWrite(); concat_k_l_star_2.SWrite(); if concat_ok: print("results match : OK") else: print("results dont match : ERROR") ## Graphical output ## concat_gk.GraphWrite("tmp_concat_gk.png"); ## concat_gl.GraphWrite("tmp_concat_gl.png"); ## concat_k_l_star_1.StateNamesEnabled(False); ## concat_k_l_star_1.GraphWrite("tmp_concat_k_l_star_1.png"); ## concat_k_l_star_2.GraphWrite("tmp_concat_k_l_star_2.png"); ## Record test case faudes.TestDump("lang. concat",concat_k_l_star_1) faudes.TestDump("lang. concat",concat_k_l_star_2) faudes.TestDump("lang. concat",concat_ok) ## validate test case faudes.TestDiff()
libFAUDES 2.34e --- 2026.03.16 --- with "omegaaut-synthesis-observer-observability-diagnosis-hiosys-iosystem-multitasking-coordinationcontrol-timed-simulator-iodevice-priorities-luabindings-hybrid-example-pybindings" |