From 0b58fcdc6845ff4dcb334bf3f44750e09a0492d7 Mon Sep 17 00:00:00 2001 From: Matej Trojak Date: Thu, 21 Jul 2022 13:56:54 -0500 Subject: [PATCH 01/17] Introduce eBCSgen specific datatypes --- lib/galaxy/datatypes/text.py | 157 +++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) diff --git a/lib/galaxy/datatypes/text.py b/lib/galaxy/datatypes/text.py index 7fd68d82444..ff18ed6e6f7 100644 --- a/lib/galaxy/datatypes/text.py +++ b/lib/galaxy/datatypes/text.py @@ -1091,3 +1091,160 @@ class Yaml(Text): except yaml.YAMLError: return False return False + + +class BCSLmodel(Text): + """BioChemical Space Language model file""" + + file_ext = "bcsl.model" + + def sniff_prefix(self, file_prefix: FilePrefix): + """ + Determines whether the file is in .bcsl.model format + """ + content = open(file_prefix.filename, "r").read() + keywords = ["#! rules", "#! inits", "#! definitions"] + return any(keyword in content for keyword in keywords) + + +class BCSLts(Json): + """BioChemical Space Language transition system file""" + + file_ext = "bcsl.ts" + + def sniff_prefix(self, file_prefix: FilePrefix): + """ + Determines whether the file is in .bcsl.ts format + """ + is_bcsl_ts = False + if self._looks_like_json(file_prefix): + is_bcsl_ts = self._looks_like_bcsl_ts(file_prefix) + return is_bcsl_ts + + def set_peek(self, dataset): + if not dataset.dataset.purged: + lines = "States: {}\nTransitions: {}\nUnique agents: {}\nInitial state: {}" + ts = json.load(open(dataset.file_name, "r")) + dataset.peek = lines.format(len(ts["nodes"]), len(ts["edges"]), len(ts["ordering"]), ts["initial"]) + dataset.blurb = nice_size(dataset.get_size()) + else: + dataset.peek = "file does not exist" + dataset.blurb = "file purged from disk" + + def _looks_like_bcsl_ts(self, file_prefix: FilePrefix): + content = open(file_prefix.filename, "r").read() + keywords = ['"edges":', '"nodes":', '"ordering":', '"initial":'] + if all(keyword in content for keyword in keywords): + try: + json.load(open(file_prefix.filename, "r")) + return True + except Exception: + return False + return False + + +class StormRegions(Text): + """ + Storm PCTL parameter synthesis result file + containing partitioning of the given parameter space. + """ + + file_ext = "storm.regions" + + def sniff_prefix(self, file_prefix: FilePrefix): + """ + Determines whether the file is in .storm.regions format + """ + content = open(file_prefix.filename, "r").read() + keywords = ["Storm-pars", "Region results"] + return all(keyword in content for keyword in keywords) + + def set_peek(self, dataset): + if not dataset.dataset.purged: + dataset.peek = "Storm-pars region results." + dataset.blurb = nice_size(dataset.get_size()) + else: + dataset.peek = "file does not exist" + dataset.blurb = "file purged from disk" + + +class StormSample(Text): + """ + Storm PCTL parameter synthesis result file + containing probability function of parameters. + """ + + file_ext = "storm.sample" + + def sniff_prefix(self, file_prefix: FilePrefix): + """ + Determines whether the file is in .storm.sample format + """ + content = open(file_prefix.filename, "r").read() + keywords = ["Storm-pars", "Result (initial states)"] + return all(keyword in content for keyword in keywords) + + def set_peek(self, dataset): + if not dataset.dataset.purged: + dataset.peek = "Storm-pars sample results." + dataset.blurb = nice_size(dataset.get_size()) + else: + dataset.peek = 'file does not exist' + dataset.blurb = 'file purged from disk' + + +class StormCheck(Text): + """ + Storm PCTL model checking result file + containing boolean or numerical result. + """ + + file_ext = "storm.check" + + def sniff_prefix(self, file_prefix: FilePrefix): + """ + Determines whether the file is in .storm.check format + """ + content = open(file_prefix.filename, "r").read() + keywords = ["Storm ", "Result (for initial states)"] + return all(keyword in content for keyword in keywords) + + def set_peek(self, dataset): + if not dataset.dataset.purged: + result = open(dataset.file_name, "r") + answer = "" + for line in result.readlines(): + if "Result (for initial states):" in line: + answer = line.split()[-1] + dataset.peek = "Model checking result: {}".format(answer) + dataset.blurb = nice_size(dataset.get_size()) + else: + dataset.peek = "file does not exist" + dataset.blurb = "file purged from disk" + + +class CTLresult(Text): + """CTL model checking result""" + + file_ext = "ctl.result" + + def sniff_prefix(self, file_prefix: FilePrefix): + """ + Determines whether the file is in .ctl.result format + """ + content = open(file_prefix.filename, "r").read() + keywords = ["Result:", "Number of satisfying states:"] + return all(keyword in content for keyword in keywords) + + def set_peek(self, dataset): + if not dataset.dataset.purged: + result = open(dataset.file_name, "r") + answer = "" + for line in result.readlines(): + if "Result:" in line: + answer = line.split()[-1] + dataset.peek = "Model checking result: {}".format(answer) + dataset.blurb = nice_size(dataset.get_size()) + else: + dataset.peek = "file does not exist" + dataset.blurb = "file purged from disk" From bd949d2c7e394bd83e493f3951d28b302cf35e5a Mon Sep 17 00:00:00 2001 From: Matej Trojak Date: Thu, 21 Jul 2022 13:57:37 -0500 Subject: [PATCH 02/17] Introduce Pithya specific datatypes --- lib/galaxy/datatypes/text.py | 57 ++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/lib/galaxy/datatypes/text.py b/lib/galaxy/datatypes/text.py index ff18ed6e6f7..a87f21310d4 100644 --- a/lib/galaxy/datatypes/text.py +++ b/lib/galaxy/datatypes/text.py @@ -1248,3 +1248,60 @@ class CTLresult(Text): else: dataset.peek = "file does not exist" dataset.blurb = "file purged from disk" + + +class PithyaProperty(Text): + """Pithya CTL property format""" + + file_ext = "pithya.property" + + def sniff_prefix(self, file_prefix: FilePrefix): + """ + Determines whether the file is in .pithya.property format + """ + content = open(file_prefix.filename, "r").read() + if re.search(":\?[a-zA-Z0-9_]+[ ]*=", content) is not None: + return True + return False + + +class PithyaModel(Text): + """Pithya model format""" + + file_ext = 'pithya.model' + + def sniff_prefix(self, file_prefix: FilePrefix): + """ + Determines whether the file is in .pithya.model format + """ + content = open(file_prefix.filename, "r").read() + keywords = ["VARS", "EQ", "THRES"] + if all(keyword in content for keyword in keywords): + return True + return False + + +class PithyaResult(Json): + """Pithya result format""" + + file_ext = "pithya.result" + + def sniff_prefix(self, file_prefix: FilePrefix): + """ + Determines whether the file is in .pithya.result format + """ + is_pithya_result = False + if self._looks_like_json(file_prefix): + is_pithya_result = self._looks_like_pithya_result(file_prefix) + return is_pithya_result + + def _looks_like_pithya_result(self, file_prefix: FilePrefix): + content = open(file_prefix.filename, "r").read() + keywords = ['"variables":', '"states":', '"parameter_values":', '"results":'] + if all(keyword in content for keyword in keywords): + try: + json.load(open(file_prefix.filename, "r")) + return True + except Exception: + return False + return False From a10835a1ff6694eec94721cb4c3f7b67a735508d Mon Sep 17 00:00:00 2001 From: Matej Trojak Date: Thu, 21 Jul 2022 14:00:23 -0500 Subject: [PATCH 03/17] Registered introduced datatypes and their sniffers --- .../config/sample/datatypes_conf.xml.sample | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/galaxy/config/sample/datatypes_conf.xml.sample b/lib/galaxy/config/sample/datatypes_conf.xml.sample index 8d897106910..fc5ad69febf 100644 --- a/lib/galaxy/config/sample/datatypes_conf.xml.sample +++ b/lib/galaxy/config/sample/datatypes_conf.xml.sample @@ -924,6 +924,15 @@ + + + + + + + + +