Yixin Liu
upload
04d5b42
from config import update_device_command
def parse_base_code(contents, debug = False):
import re
indexes = [m.start() for m in re.finditer('#####', contents)]
assert len(indexes) % 2 == 0
# split to span
spans = []
# spans.append(contents[:indexes[0]])
for i in range(len(indexes)):
if i != len(indexes) - 1:
spans.append(contents[indexes[i]:indexes[i+1]])
# spans.append(contents[indexes[-1]:])
spans_with_type = [
]
for span in spans:
if "setup" in span:
spans_with_type.append((span, "setup"))
elif "loop" in span:
spans_with_type.append((span, "loop"))
elif "main" in span:
spans_with_type.append((span, "command"))
else:
spans_with_type.append((span, "other"))
spans_with_type_added_device_control = []
for span, type_ in spans_with_type:
if type_ == "setup":
spans_with_type_added_device_control.append((
"""cd $(cd "$(dirname "$0")";pwd); source gpu_utility.sh\n\n"""
, "device_control"))
spans_with_type_added_device_control.append((span, type_))
spans_with_type_added_device_control.append(("""date_stamp=`date '+%Y-%m-%d-%H'`\nlog_dir="logs/$exp_name/$date_stamp"\nmkdir -p $log_dir\n""", "logging"))
# spans_with_type_added_device_control.append((gpu_env, "device_control"))
# spans_with_type_added_device_control.append((update_device_func, "device_control"))
elif type_ == "loop":
spans_with_type_added_device_control.append((span, type_))
elif type_ == "command":
spans_with_type_added_device_control.append((update_device_command, "device_control"))
span_remove_the_first_part = span[span.index("\n"):]
if not debug:
spans_with_type_added_device_control.append((f"\n\ncommand=\"\"\"{span_remove_the_first_part}\"\"\"\n", type_))
run_command = "eval nohup $command"
run_command += " > $log_dir/$RANDOM$RANDOM.log 2>&1 &"
run_command += "\n\n\n"
spans_with_type_added_device_control.append((run_command, type_))
else:
spans_with_type_added_device_control.append(
(f"{span_remove_the_first_part}\n", type_)
)
sleep_command = "sleep $sleeptime\n\n"
spans_with_type_added_device_control.append((sleep_command, type_))
else:
spans_with_type_added_device_control.append((span, type_))
spans_without_type = [span for span, type_ in spans_with_type_added_device_control]
spans_without_type_str = "".join(spans_without_type)
return spans_without_type_str