Mercurial > repos > bimib > marea_2_0
changeset 159:0659e109f475 draft
Uploaded
author | luca_milaz |
---|---|
date | Wed, 03 Jul 2024 16:59:50 +0000 |
parents | 5e913f9526be |
children | 8376012c51a5 |
files | marea_2_0/flux_sampling.py |
diffstat | 1 files changed, 38 insertions(+), 45 deletions(-) [+] |
line wrap: on
line diff
--- a/marea_2_0/flux_sampling.py Wed Jul 03 12:04:23 2024 +0000 +++ b/marea_2_0/flux_sampling.py Wed Jul 03 16:59:50 2024 +0000 @@ -7,8 +7,9 @@ import numpy as np import pandas as pd import cobra +import CBS_backend +from joblib import Parallel, delayed, cpu_count from cobra.sampling import OptGPSampler -#import CBS_backend #import utils.flux_analysis as flux_analysis import sys @@ -123,10 +124,7 @@ pass -def CBS_sampler(model:cobra.Model, n_samples:int=1000, n_batches:int=1, seed:int=0)-> None: - - if not os.path.exists(ARGS.output_folder + "CBS/" + ARGS.model_name): - os.makedirs(ARGS.output_folder + "CBS/" + ARGS.model_name) +def CBS_sampler(model:cobra.Model, model_name:str, n_samples:int=1000, n_batches:int=1, seed:int=0)-> None: df_FVA = cobra.flux_analysis.flux_variability_analysis(model,fraction_of_optimum=0).round(6) @@ -137,23 +135,45 @@ try: CBS_backend.randomObjectiveFunctionSampling(model, n_samples, df_coefficients.iloc[:,i*n_samples:(i+1)*n_samples], samples) except Exception as e: - # solver has failed, try sampling with cobrapy utils.logWarning( - "Warning: GLPK solver has failed for " + ARGS.model_name + ". Trying with COBRA interface.", + "Warning: GLPK solver has failed for " + model_name + ". Trying with COBRA interface.", ARGS.out_log) CBS_backend.randomObjectiveFunctionSampling_cobrapy(model, n_samples, df_coefficients.iloc[:,i*n_samples:(i+1)*n_samples], samples) - samples.to_csv(ARGS.output_folder + "CBS/" + ARGS.model_name + '_'+ str(i)+'.csv') + samples.to_csv(ARGS.output_folder + "CBS/" + model_name + '_'+ str(i)+'.csv') + + for i in range(0, n_batches): + samples_batch = pd.read_csv(ARGS.output_folder + "CBS/" + model_name + '_'+ str(i)+'.csv') + samplesTotal = pd.concat([samplesTotal, samples_batch], ignore_index = True) + + write_to_file(samplesTotal, ARGS.output_folder + model_name) for i in range(0, n_batches): - samples_batch = pd.read_csv(ARGS.output_folder + "CBS/" + ARGS.model_name + '_'+ str(i)+'.csv') - samplesTotal = pd.concat([samplesTotal, samples_batch], ignore_index = True) - write_to_file(samplesTotal, ARGS.output_folder + "CBS/" + ARGS.model_name) - for i in range(0, n_batches): - os.remove(ARGS.output_folder + "CBS/" + ARGS.model_name + '_'+ str(i)+'.csv') + os.remove(ARGS.output_folder + "CBS/" + model_name + '_'+ str(i)+'.csv') pass +def model_sampler(model_input:str, model_name:str)->None: + + model = load_custom_model( + utils.FilePath.fromStrPath(model_input), utils.FilePath.fromStrPath(model_name).ext) + + utils.logWarning( + "Sampling model: " + model_name, + ARGS.out_log) + + name = model_name.split('.')[0] + + if ARGS.sampling_algorithm == 'OPTGP': + OPTGP_sampler(model, name, ARGS.n_samples, ARGS.thinning, ARGS.n_batches, ARGS.seed) + + elif ARGS.sampling_algorithm == 'CBS': + CBS_sampler(model, name, ARGS.n_samples, ARGS.n_batches, ARGS.seed) + + pass + + + ################################- INPUT DATA LOADING -################################ def load_custom_model(file_path :utils.FilePath, ext :Optional[utils.FileFormat] = None) -> cobra.Model: """ @@ -192,13 +212,13 @@ if not os.path.exists('flux_sampling'): os.makedirs('flux_sampling') - + num_processors = cpu_count() + global ARGS ARGS = process_args(sys.argv) ARGS.output_folder = 'flux_sampling' - utils.logWarning( ARGS.input, ARGS.out_log) @@ -206,38 +226,11 @@ utils.logWarning( ARGS.name, ARGS.out_log) - - - # load custom model - #model1 = load_custom_model(utils.FilePath.fromStrPath(ARGS.inputs), "xml") - - model = load_custom_model( - utils.FilePath.fromStrPath(ARGS.input.split(",")[0]), utils.FilePath.fromStrPath(ARGS.name.split(",")[0]).ext) - model = load_custom_model( - utils.FilePath.fromStrPath(ARGS.input.split(",")[1]), utils.FilePath.fromStrPath(ARGS.name.split(",")[1]).ext) - - + models_input = ARGS.input.split(",") + models_name = ARGS.name.split(",") - a = pd.DataFrame(columns=["a"]) - a.loc[0] = ["sss"] - a.to_csv(ARGS.output_folder+"/test1.csv") - - a = pd.DataFrame(columns=["a"]) - a.loc[0] = ["sss"] - a.to_csv(ARGS.output_folder+"/test2.csv") - - - ''' - - if ARGS.sampling_algorithm == 'OPTGP': - OPTGP_sampler(model, ARGS.model_name, ARGS.n_samples, ARGS.thinning, ARGS.n_batches, ARGS.seed, ARGS.out_dir) - - elif ARGS.sampling_algorithm == 'CBS': - CBS_sampler(model, ARGS.model_name, ARGS.n_samples, ARGS.n_batches, ARGS.seed, ARGS.out_dir) - else: - raise utils.ValueErr(ARGS.sampling_algorithm, - f"Algorithm \"{ARGS.sampling_algorithm}\" is not recognized, only OPTGP and CBS are supported.")''' + Parallel(n_jobs=num_processors)(delayed(model_sampler)(model_input, model_name) for model_input, model_name in zip(models_input, models_name)) ############################################################################## if __name__ == "__main__":