From 1d3076bb68b3c9d07ff94a7c77d4f0bedce2637b Mon Sep 17 00:00:00 2001 From: George Marchment <georgemarchment@yahoo.fr> Date: Tue, 18 Mar 2025 11:47:48 +0100 Subject: [PATCH] Update ternary rewrite + added test condition extraction --- src/code_.py | 9 +++++---- tests/test_conditions_extraction.py | 31 +++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 tests/test_conditions_extraction.py diff --git a/src/code_.py b/src/code_.py index 2cf99b4..cb7b985 100644 --- a/src/code_.py +++ b/src/code_.py @@ -62,16 +62,17 @@ class Code: pattern = r"(def)? *(\w+) *\= *([^?\n]+) *\? *([^:\n]+) *\: *([^\n]+)\n" to_replace = [] for match in re.finditer(pattern, code): - try: + def_variable = "" + if(match.group(1)!=None): def_variable = match.group(1) - except: - def_variable = "" + + variable = match.group(2) condition = match.group(3).strip() exp1, exp2 = match.group(4).strip(), match.group(5).strip() old = match.group(0) new = f"if ({condition}) {{\n{def_variable} {variable} = {exp1}\n}}\n" - new += f"if (!({condition})) {{\n{def_variable} {variable} = {exp2}\n}}\n\n" + new += f"else {{\n{def_variable} {variable} = {exp2}\n}}\n\n" #else {{\n{variable} = {exp2}\n}}\n" #Here we check that it's worked correctly -> that we have done a good parsing if(get_parenthese_count(condition)==0 and get_parenthese_count(exp1)==0 and get_parenthese_count(exp2)==0 and get_curly_count(condition)==0 and get_curly_count(exp1)==0 and get_curly_count(exp2)==0): diff --git a/tests/test_conditions_extraction.py b/tests/test_conditions_extraction.py new file mode 100644 index 0000000..05330ca --- /dev/null +++ b/tests/test_conditions_extraction.py @@ -0,0 +1,31 @@ +import os +import unittest +from src.outils import extract_conditions + +class TestExtractConditions(unittest.TestCase): + + #TODO -> finish this + + def test_1(self): + test = """ + if ((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == true)) {error "ERROR: please specify methylation context for analysis"} +else if ((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == false)) {context = "--noCpG --CHG "} +else if ((params.noCpG == true) && (params.noCHH == false) && (params.noCHG == true)) {context = "--noCpG --CHH "} +else if ((params.noCpG == true) && (params.noCHH == false) && (params.noCHG == false)) {context = "--noCpG --CHH --CHG "} +else if ((params.noCpG == false) && (params.noCHH == true) && (params.noCHG == true)) {context = " "} +else if ((params.noCpG == false) && (params.noCHH == true) && (params.noCHG == false)) {context = "--CHG "} +else if ((params.noCpG == false) && (params.noCHH == false) && (params.noCHG == true)) {context = "--CHH "} +else {context = "--CHH --CHG "} +""" + dico = extract_conditions(test) + results = {'(params.noCpG == true) && (params.noCHH == true) && (params.noCHG == true)$$__$$0': (90, 152), '!((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == true)) && (params.noCpG == true) && (params.noCHH == true) && (params.noCHG == false)$$__$$1': (241, 267), '!((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == true)) && !((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == false)) && (params.noCpG == true) && (params.noCHH == false) && (params.noCHG == true)$$__$$2': (356, 382), '!((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == true)) && !((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == false)) && !((params.noCpG == true) && (params.noCHH == false) && (params.noCHG == true)) && (params.noCpG == true) && (params.noCHH == false) && (params.noCHG == false)$$__$$3': (472, 504), '!((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == true)) && !((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == false)) && !((params.noCpG == true) && (params.noCHH == false) && (params.noCHG == true)) && !((params.noCpG == true) && (params.noCHH == false) && (params.noCHG == false)) && (params.noCpG == false) && (params.noCHH == true) && (params.noCHG == true)$$__$$4': (593, 606), '!((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == true)) && !((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == false)) && !((params.noCpG == true) && (params.noCHH == false) && (params.noCHG == true)) && !((params.noCpG == true) && (params.noCHH == false) && (params.noCHG == false)) && !((params.noCpG == false) && (params.noCHH == true) && (params.noCHG == true)) && (params.noCpG == false) && (params.noCHH == true) && (params.noCHG == false)$$__$$5': (696, 714), '!((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == true)) && !((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == false)) && !((params.noCpG == true) && (params.noCHH == false) && (params.noCHG == true)) && !((params.noCpG == true) && (params.noCHH == false) && (params.noCHG == false)) && !((params.noCpG == false) && (params.noCHH == true) && (params.noCHG == true)) && !((params.noCpG == false) && (params.noCHH == true) && (params.noCHG == false)) && (params.noCpG == false) && (params.noCHH == false) && (params.noCHG == true)$$__$$6': (804, 822), '!((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == true)) && !((params.noCpG == true) && (params.noCHH == true) && (params.noCHG == false)) && !((params.noCpG == true) && (params.noCHH == false) && (params.noCHG == true)) && !((params.noCpG == true) && (params.noCHH == false) && (params.noCHG == false)) && !((params.noCpG == false) && (params.noCHH == true) && (params.noCHG == true)) && !((params.noCpG == false) && (params.noCHH == true) && (params.noCHG == false)) && !((params.noCpG == false) && (params.noCHH == false) && (params.noCHG == true))$$__$$7': (830, 854)} + #print(dico) + #for condition in dico: + # print(condition) + # start, end = dico[condition] + # print(test[start:end]) + # print() + #print() + self.assertEqual(results, dico) + + -- GitLab