From fa0b6b7bbe49b36907bc57ec960764bc9805546b Mon Sep 17 00:00:00 2001 From: shelleylwang Date: Wed, 29 Jan 2025 17:44:01 -0500 Subject: [PATCH 1/2] I have added code that takes in r-styled config files, translates them into python styling, then proceeds with running the program --- deepdive/config_runner.py | 4 ++++ deepdive/deepdiver_utilities.py | 29 +++++++++++++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/deepdive/config_runner.py b/deepdive/config_runner.py index b2cbffc..3873e94 100644 --- a/deepdive/config_runner.py +++ b/deepdive/config_runner.py @@ -10,6 +10,7 @@ from .deepdiver_utilities import * from .plots import add_geochrono_no_labels from .plots import features_through_time, plot_dd_predictions +from .deepdiver_utilities import convert_r_to_python_style np.set_printoptions(suppress=True, precision=3) @@ -23,6 +24,9 @@ def run_config(config_file, wd=None, CPU=None, trained_model=None, config = configparser.ConfigParser() config.read(config_file) + # Convert R-style syntax to Python-style immediately after reading + config = convert_r_to_python_style(config) + if wd is not None: config["general"]["wd"] = wd diff --git a/deepdive/deepdiver_utilities.py b/deepdive/deepdiver_utilities.py index 31fc184..5685d8f 100644 --- a/deepdive/deepdiver_utilities.py +++ b/deepdive/deepdiver_utilities.py @@ -19,6 +19,29 @@ from .plots import plot_training_history from .simulation_utilities import * +def convert_r_to_python_style(config): + """Convert R-style syntax to Python-style in config object""" + for section in config.sections(): + for key in config[section]: + value = config[section][key] + if isinstance(value, str): + # Convert R booleans + if value.upper() == "TRUE": + config[section][key] = "True" + elif value.upper() == "FALSE": + config[section][key] = "False" + # Convert R NA + elif value.upper() == "NA": + config[section][key] = "None" + # Convert R c() vectors + elif value.strip().startswith("c(") and value.strip().endswith(")"): + # Extract values between c( and ), split by comma, strip whitespace + values = value.strip()[2:-1].split(",") + values = [v.strip() for v in values] + # Join with spaces + config[section][key] = " ".join(values) + return config + # create simulator object def create_sim_obj_from_config(config, rseed=None): @@ -142,7 +165,7 @@ def create_sim_obj_from_config(config, rseed=None): return bd_sim, fossil_sim -def run_sim_from_config(config): +def run_sim_from_config(config): # simulate training data bd_sim, fossil_sim = create_sim_obj_from_config(config, rseed=config.getint("simulations", "training_seed")) @@ -226,7 +249,7 @@ def run_sim_from_config(config): return f, l, d -def run_test_sim_from_config(config): +def run_test_sim_from_config(config): # simulate test data bd_sim, fossil_sim = create_sim_obj_from_config(config, rseed=config.getint("simulations", "test_seed")) @@ -495,6 +518,7 @@ def predict_from_config(config, return_features=False, model_tag="", model_dir_id="rnn_model", calibrated=False, return_transformed_diversity=False, model_dir=None, label_rescaler=None): + dd_input = os.path.join(config["general"]["wd"], config["empirical_predictions"]["empirical_input_file"]) if model_dir is not None: loaded_models = load_models(model_wd=model_dir) @@ -543,6 +567,7 @@ def predict_from_config(config, return_features=False, def predict_testset_from_config(config, test_feature_file, test_label_file, model_tag="", model_dir_id="rnn_model", calibrated=False, return_features=False, model_dir=None, label_rescaler=None): + if model_dir is not None: loaded_models = load_models(model_wd=model_dir) else: From 1fdccb576e57f256727847e4f66a5d71e0c29de9 Mon Sep 17 00:00:00 2001 From: shelleylwang Date: Tue, 4 Feb 2025 14:06:40 -0500 Subject: [PATCH 2/2] fixed another bug: run_model_training_from_config file path was incorrectly constructed with duplicate directories --- deepdive/deepdiver_utilities.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/deepdive/deepdiver_utilities.py b/deepdive/deepdiver_utilities.py index 5685d8f..1daccdf 100644 --- a/deepdive/deepdiver_utilities.py +++ b/deepdive/deepdiver_utilities.py @@ -418,6 +418,9 @@ def run_model_training_from_config(config, feature_file=None, label_file=None, if config["model_training"]["f"] == "NULL": sys.exit("No feature or label files specified, provide to run_model_training or in the config (see R)") model_wd = os.path.join(config["general"]["wd"], config["model_training"]["model_folder"]).replace("\\", "/") + # Fix: Use the actual feature file name that was generated + feature_file = os.path.basename(feature_file) + label_file = os.path.basename(label_file) Xt = np.load(os.path.join(sims_path, feature_file)) Yt = np.load(os.path.join(sims_path, label_file)) infile_name = os.path.basename(feature_file).split('.npy')[0].replace("_training_features", "")