SaProt / scripts /utils /others.py
anzhi2710gmailcom's picture
Upload folder using huggingface_hub
3b99abb verified
Raw
History Blame Contribute Delete
1.86 kB
import torch
import numpy as np
import random
import time
import re
from tqdm import tqdm
from Bio import SeqIO
# compute running time by 'with' grammar
class TimeCounter:
def __init__(self, text):
self.text = text
def __enter__(self):
self.start = time.time()
print(self.text, flush=True)
def __exit__(self, exc_type, exc_val, exc_tb):
end = time.time()
t = end - self.start
print(f"\nFinished. The time is {t:.2f}s.\n", flush=True)
def progress_bar(now: int, total: int, desc: str = '', end='\n'):
length = 50
now = now if now <= total else total
num = now * length // total
progress_bar = '[' + '#' * num + '_' * (length - num) + ']'
display = f'{desc:<10} {progress_bar} {int(now/total*100):02d}% {now}/{total}'
print(f'\r\033[31m{display}\033[0m', end=end, flush=True)
def setup_seed(seed):
torch.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
np.random.seed(seed)
random.seed(seed)
torch.backends.cudnn.deterministic = True
def random_seed():
torch.seed()
torch.cuda.seed()
np.random.seed()
random.seed()
torch.backends.cudnn.deterministic = False
def a3m_formalize(input, output, keep_gap=True):
with open(output, 'w') as w:
for record in SeqIO.parse(input, 'fasta'):
desc = record.description
if keep_gap:
seq = re.sub(r"[a-z]", "", str(record.seq))
else:
seq = re.sub(r"[a-z-]", "", str(record.seq))
w.write(f">{desc}\n{seq}\n")
def merge_file(file_list: list, save_path: str):
with open(save_path, 'w') as w:
for i, file in enumerate(file_list):
with open(file, 'r') as r:
for line in tqdm(r, f"Merging {file}... ({i+1}/{len(file_list)})"):
w.write(line)