about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gn3/computations/rust_correlation.py46
1 files changed, 44 insertions, 2 deletions
diff --git a/gn3/computations/rust_correlation.py b/gn3/computations/rust_correlation.py
index e739382..926e6fe 100644
--- a/gn3/computations/rust_correlation.py
+++ b/gn3/computations/rust_correlation.py
@@ -1,15 +1,57 @@
 import subprocess
+import json
 
+from gn3.computations.qtlreaper import create_output_directory
+from gn3.random import random_string
 from gn3.settings import CORRELATION_COMMAND
 from gn3.settings import TMPDIR
 
 
-def run_correlation(file_name: str, outputdir: str = TMPDIR):
+def generate_input_files(dataset: list[str], output_dir: str = TMPDIR):
+    """function generates outputfiles and inputfiles"""
 
-    command_list = [CORRELATION_COMMAND, file_name, outputdir]
+    tmpdir = create_output_directory(f"{output_dir}/correlation")
+
+    tmp_file = os.path.join(tmpdir, f"/{random_string(10)}.txt")
+
+    with open(tmp_file, "w") as file_writer:
+        file_writer.write("\n".join(dataset))
+
+    return (tmp_dir, tmp_file)
+
+
+def generate_json_file(**kwargs):
+    """generating json input file required by cargo"""
+
+    (tmp_dir, tmp_file) = generate_json_file(kwargs.get("dataset"))
+
+    tmp_json_file = os.path.join(tmp_dir, f"/{random_string(10)}.json")
+
+    correlation_args = {
+        "method": kwargs.get("method", "pearson"),
+        "file_path": tmp_file,
+        "x_vals": kwargs.get("x_vals"),
+        "file_delimiter": kwargs.get("delimiter", ",")
+    }
+
+    with open(tmp_json_file, "w") as outputfile:
+        json.dump(correlation_args, outputfile)
+
+    return tmp_json_file
+
+
+def run_correlation(dataset, trait_vals: list[str], method: str, delimiter: str):
+    """entry function to call rust correlation"""
+
+    generate_json_file = generate_json_file(
+        {"method": method, "delimiter": delimiter, "x_vals": trait_vals})
+
+    command_list = [CORRELATION_COMMAND, generate_json_file, outputdir]
 
     results = subprocess.run(command_list, check=True)
 
+    # handle errors
+
     return results