Spaces:
Runtime error
Runtime error
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
# :noTabs=true: | |
# (c) Copyright Rosetta Commons Member Institutions. | |
# (c) This file is part of the Rosetta software suite and is made available under license. | |
# (c) The Rosetta software is developed by the contributing members of the Rosetta Commons. | |
# (c) For more information, see http://www.rosettacommons.org. Questions about this can be | |
# (c) addressed to University of Washington CoMotion, email: license@uw.edu. | |
## @file rfd.py | |
## @brief main test files for RFdiffusion | |
## @author Sergey Lyskov | |
import imp | |
imp.load_source(__name__, '/'.join(__file__.split('/')[:-1]) + '/__init__.py') # A bit of Python magic here, what we trying to say is this: from __init__ import *, but init is calculated from file location | |
_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: | |
# tmpdirname = working_dir+'/.ve' | |
# if True: | |
#ve = setup_persistent_python_virtual_environment(python_environment, packages='numpy torch omegaconf scipy opt_einsum dgl') | |
#ve = setup_python_virtual_environment(working_dir+'/.ve', python_environment, packages='numpy torch omegaconf scipy opt_einsum dgl e3nn icecream pyrsistent wandb pynvml decorator jedi hydra-core') | |
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 .') | |
#res, output = execute('running unit tests...', f'{ve.activate} && cd {repository_root} && python -m unittest', return_='tuple', add_message_and_command_line_to_output=True) | |
#res, output = execute('running unit tests...', f'cd {repository_root} && {ve.bin}/pytest', return_='tuple') | |
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)) | |