|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import imp |
|
imp.load_source(__name__, '/'.join(__file__.split('/')[:-1]) + '/__init__.py') |
|
|
|
_api_version_ = '1.0' |
|
|
|
import os, tempfile, shutil |
|
import urllib.request |
|
|
|
|
|
_models_urls_ = ''' |
|
http://files.ipd.uw.edu/pub/RFdiffusion/6f5902ac237024bdd0c176cb93063dc4/Base_ckpt.pt |
|
http://files.ipd.uw.edu/pub/RFdiffusion/e29311f6f1bf1af907f9ef9f44b8328b/Complex_base_ckpt.pt |
|
http://files.ipd.uw.edu/pub/RFdiffusion/60f09a193fb5e5ccdc4980417708dbab/Complex_Fold_base_ckpt.pt |
|
http://files.ipd.uw.edu/pub/RFdiffusion/74f51cfb8b440f50d70878e05361d8f0/InpaintSeq_ckpt.pt |
|
http://files.ipd.uw.edu/pub/RFdiffusion/76d00716416567174cdb7ca96e208296/InpaintSeq_Fold_ckpt.pt |
|
http://files.ipd.uw.edu/pub/RFdiffusion/5532d2e1f3a4738decd58b19d633b3c3/ActiveSite_ckpt.pt |
|
http://files.ipd.uw.edu/pub/RFdiffusion/12fc204edeae5b57713c5ad7dcb97d39/Base_epoch8_ckpt.pt |
|
http://files.ipd.uw.edu/pub/RFdiffusion/f572d396fae9206628714fb2ce00f72e/Complex_beta_ckpt.pt |
|
http://files.ipd.uw.edu/pub/RFdiffusion/1befcb9b28e2f778f53d47f18b7597fa/RF_structure_prediction_weights.pt |
|
'''.split() |
|
|
|
|
|
def run_main_test_suite(repository_root, working_dir, platform, config, debug): |
|
full_log = '' |
|
|
|
python_environment = local_python_install(platform, config) |
|
|
|
models_dir = repository_root + '/models' |
|
if not os.path.isdir(models_dir): os.makedirs(models_dir) |
|
|
|
for url in _models_urls_: |
|
file_name = models_dir + '/' + url.split('/')[-1] |
|
tmp_file_name = file_name + '.tmp' |
|
if not os.path.isfile(file_name): |
|
print(f'downloading {url}...') |
|
full_log += f'downloading {url}...\n' |
|
urllib.request.urlretrieve(url, tmp_file_name) |
|
os.rename(tmp_file_name, file_name) |
|
|
|
execute('unpacking ppi scaffolds...', f'cd {repository_root} && tar -xvf examples/ppi_scaffolds_subset.tar.gz -C examples') |
|
|
|
with tempfile.TemporaryDirectory(dir=working_dir) as tmpdirname: |
|
|
|
|
|
|
|
|
|
|
|
ve = setup_python_virtual_environment(tmpdirname, python_environment, packages='numpy torch omegaconf scipy opt_einsum dgl e3nn icecream pyrsistent wandb pynvml decorator jedi hydra-core') |
|
|
|
execute('Installing local se3-transformer package...', f'cd {repository_root}/env/SE3Transformer && {ve.bin}/pip3 install --editable .') |
|
execute('Installing RFdiffusion package...', f'cd {repository_root} && {ve.bin}/pip3 install --editable .') |
|
|
|
|
|
|
|
|
|
|
|
results_file = f'{repository_root}/tests/.results.json' |
|
if os.path.isfile(results_file): os.remove(results_file) |
|
|
|
res, output = execute('running RFdiffusion tests...', f'{ve.activate} && cd {repository_root}/tests && python test_diffusion.py', return_='tuple', add_message_and_command_line_to_output=True) |
|
|
|
if os.path.isfile(results_file): |
|
with open(results_file) as f: sub_tests_reults = json.load(f) |
|
|
|
state = _S_passed_ |
|
for r in sub_tests_reults.values(): |
|
if r[_StateKey_] == _S_failed_: |
|
state = _S_failed_ |
|
break |
|
|
|
else: |
|
sub_tests_reults = {} |
|
output += '\n\nEmpty sub-test results, marking test as `failed`...' |
|
state = _S_failed_ |
|
|
|
shutil.move(f'{repository_root}/tests/outputs', f'{working_dir}/outputs') |
|
|
|
for d in os.listdir(f'{repository_root}/tests'): |
|
p = f'{repository_root}/tests/{d}' |
|
if d.startswith('tests_') and os.path.isdir(p): shutil.rmtree(p) |
|
|
|
results = { |
|
_StateKey_ : state, |
|
_LogKey_ : full_log + '\n' + output, |
|
_ResultsKey_ : { |
|
_TestsKey_ : sub_tests_reults, |
|
}, |
|
} |
|
|
|
return results |
|
|
|
|
|
|
|
def run(test, repository_root, working_dir, platform, config, hpc_driver=None, verbose=False, debug=False): |
|
if test == '': return run_main_test_suite(repository_root=repository_root, working_dir=working_dir, platform=platform, config=config, debug=debug) |
|
else: raise BenchmarkError('Unknow scripts test: {}!'.format(test)) |
|
|