about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-01-24 15:24:59 +0300
committerFrederick Muriuki Muriithi2022-01-27 10:02:02 +0300
commit7bc3d9a11ee1e5a863a01a91abd7510bdbfae54e (patch)
tree2592a5db5ac644846e0383062fa2dfabd30e9c8f
parentf9dfc61b4fe5d78c6a09adbeafa28a4e5d91c2ad (diff)
downloadgenenetwork3-7bc3d9a11ee1e5a863a01a91abd7510bdbfae54e.tar.gz
Refactor: Remove circular import refactor-circular-import
The function
`gn3.computation.partial_correlations.correlations_of_all_tissue_traits` was,
before this commit, called inside the
`gn3.db.correlations.build_temporary_tissue_correlations_table`
function, leading to a circular dependency. This commit removes the circular
dependency by rearranging the calls.
-rw-r--r--gn3/computations/partial_correlations.py14
-rw-r--r--gn3/db/correlations.py36
2 files changed, 18 insertions, 32 deletions
diff --git a/gn3/computations/partial_correlations.py b/gn3/computations/partial_correlations.py
index 9bad12a..4b35c51 100644
--- a/gn3/computations/partial_correlations.py
+++ b/gn3/computations/partial_correlations.py
@@ -406,6 +406,12 @@ def partial_corrs(# pylint: disable=[R0913]
     `web.webqtl.correlation.PartialCorrDBPage.__init__` function in
     GeneNetwork1.
     """
+    symbol_corr_dict, symbol_p_value_dict = correlations_of_all_tissue_traits(
+        fetch_gene_symbol_tissue_value_dict_for_trait(
+            (input_trait_symbol,), tissue_probeset_freeze_id, conn),
+        fetch_gene_symbol_tissue_value_dict_for_trait(
+            tuple(), tissue_probeset_freeze_id, conn),
+        method)
     if database_filename:
         return partial_correlations_fast(
             samples, primary_vals, control_vals, database_filename,
@@ -414,15 +420,15 @@ def partial_corrs(# pylint: disable=[R0913]
                     species, input_trait_geneid, dataset, return_number, conn)
                 if "literature" in method.lower() else
                 fetch_tissue_correlations(
-                    dataset, input_trait_symbol, tissue_probeset_freeze_id,
-                    method, return_number, conn)),
+                    dataset, symbol_corr_dict, symbol_p_value_dict,
+                    return_number, conn)),
             method,
             ("literature" if method.lower() == "sgo literature correlation"
              else ("tissue" if "tissue" in method.lower() else "genetic")))
 
     trait_database, data_start_pos = fetch_all_database_data(
-        conn, species, input_trait_geneid, input_trait_symbol, samples, dataset,
-        method, return_number, tissue_probeset_freeze_id)
+        conn, species, input_trait_geneid, samples, dataset, method,
+        symbol_corr_dict, symbol_p_value_dict, return_number)
     return partial_correlations_normal(
         primary_vals, control_vals, input_trait_geneid, trait_database,
         data_start_pos, dataset, method)
diff --git a/gn3/db/correlations.py b/gn3/db/correlations.py
index d372607..4f0d404 100644
--- a/gn3/db/correlations.py
+++ b/gn3/db/correlations.py
@@ -275,7 +275,7 @@ def fetch_gene_symbol_tissue_value_dict_for_trait(
     return {}
 
 def build_temporary_tissue_correlations_table(
-        conn: Any, trait_symbol: str, probeset_freeze_id: int, method: str,
+        conn: Any, symbol_corr_dict: dict, symbol_p_value_dict: dict,
         return_number: int) -> str:
     """
     Build a temporary table to hold the tissue correlations data.
@@ -283,26 +283,6 @@ def build_temporary_tissue_correlations_table(
     This is a migration of the
     `web.webqtl.correlation.CorrelationPage.getTempTissueCorrTable` function in
     GeneNetwork1."""
-    # We should probably pass the `correlations_of_all_tissue_traits` function
-    # as an argument to this function and get rid of the one call immediately
-    # following this comment.
-    from gn3.computations.partial_correlations import (#pylint: disable=[C0415, R0401]
-        correlations_of_all_tissue_traits)
-    # This import above is necessary within the function to avoid
-    # circular-imports.
-    #
-    #
-    # This import above is indicative of convoluted code, with the computation
-    # being interwoven with the data retrieval. This needs to be changed, such
-    # that the function being imported here is no longer necessary, or have the
-    # imported function passed to this function as an argument.
-    symbol_corr_dict, symbol_p_value_dict = correlations_of_all_tissue_traits(
-        fetch_gene_symbol_tissue_value_dict_for_trait(
-            (trait_symbol,), probeset_freeze_id, conn),
-        fetch_gene_symbol_tissue_value_dict_for_trait(
-            tuple(), probeset_freeze_id, conn),
-        method)
-
     symbol_corr_list = sorted(
         symbol_corr_dict.items(), key=lambda key_val: key_val[1])
 
@@ -326,8 +306,8 @@ def build_temporary_tissue_correlations_table(
 
     return temp_table_name
 
-def fetch_tissue_correlations(# pylint: disable=R0913
-        dataset: dict, trait_symbol: str, probeset_freeze_id: int, method: str,
+def fetch_tissue_correlations(
+        dataset: dict, symbol_corr_dict: dict, symbol_p_value_dict: dict,
         return_number: int, conn: Any) -> dict:
     """
     Pair tissue correlations data with a trait id string.
@@ -337,7 +317,7 @@ def fetch_tissue_correlations(# pylint: disable=R0913
     GeneNetwork1.
     """
     temp_table = build_temporary_tissue_correlations_table(
-        conn, trait_symbol, probeset_freeze_id, method, return_number)
+        conn, symbol_corr_dict, symbol_p_value_dict, return_number)
     with conn.cursor() as cursor:
         cursor.execute(
             (
@@ -473,9 +453,9 @@ def build_query_tissue_corr(db_type, temp_table, sample_id_columns, joins):
         3)
 
 def fetch_all_database_data(# pylint: disable=[R0913, R0914]
-        conn: Any, species: str, gene_id: int, trait_symbol: str,
-        samples: Tuple[str, ...], dataset: dict, method: str,
-        return_number: int, probeset_freeze_id: int) -> Tuple[
+        conn: Any, species: str, gene_id: int, samples: Tuple[str, ...],
+        dataset: dict, method: str, symbol_corr_dict: dict,
+        symbol_p_value_dict: dict, return_number: int) -> Tuple[
             Tuple[float], int]:
     """
     This is a migration of the
@@ -556,7 +536,7 @@ def fetch_all_database_data(# pylint: disable=[R0913, R0914]
                 "tissue correlation, pearson's r",
                 "tissue correlation, spearman's rho"):
             temp_table = build_temporary_tissue_correlations_table(
-                conn, trait_symbol, probeset_freeze_id, method, return_number)
+                conn, symbol_corr_dict, symbol_p_value_dict, return_number)
 
     trait_database = tuple(
         item for sublist in