changeset 198:ecd1b2ae80c6 draft

Uploaded
author luca_milaz
date Fri, 05 Jul 2024 07:16:07 +0000
parents 6450c450253e
children c298efdfe431
files marea_2_0/flux_sampling.py
diffstat 1 files changed, 32 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/marea_2_0/flux_sampling.py	Fri Jul 05 07:05:25 2024 +0000
+++ b/marea_2_0/flux_sampling.py	Fri Jul 05 07:16:07 2024 +0000
@@ -130,7 +130,7 @@
             CBS_backend.randomObjectiveFunctionSampling(model, n_samples, df_coefficients.iloc[:,i*n_samples:(i+1)*n_samples], samples)
         except Exception as e:
             utils.logWarning(
-            "Warning: GLPK solver has failed for " + model_name + ". Trying with COBRA interface.",
+            "Warning: GLPK solver has failed for " + model_name + ". Trying with COBRA interface. Error:" + e,
             ARGS.out_log)
             CBS_backend.randomObjectiveFunctionSampling_cobrapy(model, n_samples, df_coefficients.iloc[:,i*n_samples:(i+1)*n_samples], 
                                                     samples)
@@ -148,7 +148,11 @@
     pass
 
 
-def model_sampler(model_input:str, model_name:str, df_mean:pd.DataFrame, df_median:pd.DataFrame, df_quantiles:pd.DataFrame)->None:
+def model_sampler(model_input:str, model_name:str)-> List[pd.DataFrame]:
+
+    df_mean = pd.DataFrame()
+    df_median= pd.DataFrame()
+    df_quantiles= pd.DataFrame()
 
     model = load_custom_model(
         utils.FilePath.fromStrPath(model_input), utils.FilePath.fromStrPath(model_name).ext)
@@ -165,11 +169,14 @@
     elif ARGS.algorithm == 'CBS':
         CBS_sampler(model,  name, ARGS.n_samples, ARGS.n_batches, ARGS.seed)
 
-    fluxes_statistics(name, ARGS.output_types, df_mean, df_median, df_quantiles)
+    df_mean, df_median, df_quantiles = fluxes_statistics(name, ARGS.output_types, df_mean, df_median, df_quantiles)
 
-    pass
+    if("fluxes" not in ARGS.output_types):
+        os.remove(ARGS.output_folder  +  model_name + '.csv')
 
-def fluxes_statistics(model_name: str,  output_types:List, df_mean:pd.DataFrame, df_median:pd.DataFrame, df_quantiles:pd.DataFrame)->None:
+    return df_mean, df_median, df_quantiles
+
+def fluxes_statistics(model_name: str,  output_types:List, df_mean:pd.DataFrame, df_median:pd.DataFrame, df_quantiles:pd.DataFrame)-> List[pd.DataFrame]:
 
     df_samples = pd.read_csv(ARGS.output_folder  +  model_name + '.csv', sep = '\t')
     for output_type in output_types:
@@ -202,15 +209,7 @@
             df_temp.index = [model_name]
             df_quantiles = pd.concat([df_quantiles, df_temp])
     
-
-    utils.logWarning(
-        str(df_mean.shape),
-        ARGS.out_log)
-
-    if("fluxes" not in output_types):
-        os.remove(ARGS.output_folder  +  model_name + '.csv')
-
-    pass
+    return df_mean, df_median, df_quantiles
     
 
 ################################- INPUT DATA LOADING -################################
@@ -266,25 +265,28 @@
     models_name = ARGS.name.split(",")
     ARGS.output_types = ARGS.output_type.split(",")
 
-    
-    df_mean = pd.DataFrame()
-    df_median= pd.DataFrame()
-    df_quantiles= pd.DataFrame()
  
-    Parallel(n_jobs=num_processors)(delayed(model_sampler)(model_input, model_name, 
-                                                           df_mean, df_median, df_quantiles) for model_input, model_name in zip(models_input, models_name))
+    results = Parallel(n_jobs=num_processors)(delayed(model_sampler)(model_input, model_name) for model_input, model_name in zip(models_input, models_name))
+
+    all_mean = pd.concat([result[0] for result in results], ignore_index=True)
+    all_median = pd.concat([result[1] for result in results], ignore_index=True)
+    all_quantiles = pd.concat([result[2] for result in results], ignore_index=True)
 
-    df_mean = df_mean.fillna(0.0)
-    df_mean = df_mean.sort_index()
-    write_to_file(df_mean, "mean")
+    if("mean" in ARGS.output_types):
+        all_mean = all_mean.fillna(0.0)
+        all_mean = all_mean.sort_index()
+        write_to_file(df_mean, "mean")
 
-    df_median = df_median.fillna(0.0)
-    df_median = df_median.sort_index()
-    write_to_file(df_median, "median")
-
-    df_quantiles = df_quantiles.fillna(0.0)
-    df_quantiles = df_quantiles.sort_index()
-    write_to_file(df_quantiles, "quantiles")
+    if("median" in ARGS.output_types):
+        all_median = all_median.fillna(0.0)
+        all_median = all_median.sort_index()
+        write_to_file(all_median, "median")
+    
+    if("quantiles" in ARGS.output_types):
+        all_quantiles = all_quantiles.fillna(0.0)
+        all_quantiles = all_quantiles.sort_index()
+        write_to_file(all_quantiles, "quantiles")
+    pass
         
 ##############################################################################
 if __name__ == "__main__":