{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":67356,"databundleVersionId":8006601,"sourceType":"competition"},{"sourceId":8275617,"sourceType":"datasetVersion","datasetId":4914065}],"dockerImageVersionId":30734,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import gc\nimport os\nimport pickle\nimport random\nimport joblib\nimport numpy as np\nimport pandas as pd\nfrom tqdm import tqdm\nfrom sklearn.model_selection import StratifiedKFold\nfrom sklearn.metrics import average_precision_score as A","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install fastparquet -q","metadata":{"execution":{"iopub.status.busy":"2024-06-29T12:07:03.963236Z","iopub.execute_input":"2024-06-29T12:07:03.964334Z","iopub.status.idle":"2024-06-29T12:07:18.674394Z","shell.execute_reply.started":"2024-06-29T12:07:03.96429Z","shell.execute_reply":"2024-06-29T12:07:18.672781Z"},"trusted":true},"execution_count":3,"outputs":[]},{"cell_type":"code","source":"class CFG:\n\n    PREPROCESS = False\n    EPOCHS = 20\n    BATCH_SIZE = 4096\n    LR = 1e-3\n    WD = 0.05\n\n    NBR_FOLDS = 15\n    SELECTED_FOLDS = [0]\n\n    SEED = 2024","metadata":{"execution":{"iopub.status.busy":"2024-06-29T12:07:28.102374Z","iopub.execute_input":"2024-06-29T12:07:28.102828Z","iopub.status.idle":"2024-06-29T12:07:28.109561Z","shell.execute_reply.started":"2024-06-29T12:07:28.102785Z","shell.execute_reply":"2024-06-29T12:07:28.108383Z"},"trusted":true},"execution_count":4,"outputs":[]},{"cell_type":"code","source":"!pip install tokenizers\n!pip install transformers","metadata":{"execution":{"iopub.status.idle":"2024-06-29T12:07:54.51727Z","shell.execute_reply.started":"2024-06-29T12:07:30.075732Z","shell.execute_reply":"2024-06-29T12:07:54.515811Z"},"trusted":true},"execution_count":5,"outputs":[]},{"cell_type":"code","source":"import torch\nimport os\nimport random\nimport numpy as np\n\ndef set_seeds(seed):\n    os.environ['PYTHONHASHSEED'] = str(seed)\n    random.seed(seed)\n    torch.manual_seed(seed)\n    np.random.seed(seed)\n    torch.cuda.manual_seed(seed)\n    torch.cuda.manual_seed_all(seed)  # if you are using multi-GPU.\n    torch.backends.cudnn.deterministic = True\n    torch.backends.cudnn.benchmark = False\n\nset_seeds(seed=CFG.SEED)\n","metadata":{"execution":{"iopub.status.busy":"2024-06-29T12:08:04.181542Z","iopub.execute_input":"2024-06-29T12:08:04.181998Z","iopub.status.idle":"2024-06-29T12:08:07.845033Z","shell.execute_reply.started":"2024-06-29T12:08:04.181957Z","shell.execute_reply":"2024-06-29T12:08:07.843865Z"},"trusted":true},"execution_count":6,"outputs":[]},{"cell_type":"code","source":"enc = { '[PAD]':0,\n        'Br':1, 'C':2, 'N':3, 'O':4, 'H':5, 'S':6, 'F':7, 'Cl':8, 'B':9, 'I':10, \n        's':11,'o':12, 'c':13, 'n':14, 'i':15, \n        '.':16 ,'=':17 ,'#':18, \n        '/':19, \n        '-':20, '+': 21, \n        '[':22,']':23, \n        '(':24,')':25, \n        '@@':26, '@':27,\n        '1':28,'2':29,'3':30,'4':31,'5':32,'6':33,'7':34,'8':35,'9':36\n      }","metadata":{"execution":{"iopub.status.busy":"2024-06-29T12:08:24.516736Z","iopub.execute_input":"2024-06-29T12:08:24.518091Z","iopub.status.idle":"2024-06-29T12:08:24.52493Z","shell.execute_reply.started":"2024-06-29T12:08:24.51805Z","shell.execute_reply":"2024-06-29T12:08:24.523794Z"},"trusted":true},"execution_count":7,"outputs":[]},{"cell_type":"code","source":"def encode_smile(smile):\n    tmp = [enc.get(i, 0) for i in smile]  # Use .get() to handle unknown characters\n    tmp = tmp + [0] * (142 - len(tmp))\n    return np.array(tmp).astype(np.uint8)\n\ndef process_smiles(smiles):\n    return np.stack(joblib.Parallel(n_jobs=-1)(joblib.delayed(encode_smile)(smile) for smile in tqdm(smiles)))\n\nif CFG.PREPROCESS:\n    train_raw = pd.read_parquet('/kaggle/input/leash-BELKA/train.parquet')\n    test_raw = pd.read_parquet('/kaggle/input/leash-BELKA/test.parquet')\n    \n    for protein_name in ['BRD4', 'HSA', 'sEH']:\n        smiles = train_raw[train_raw['protein_name'] == protein_name]['molecule_smiles'].values\n        if protein_name == 'BRD4':\n            ref_smiles = smiles\n        assert (smiles != ref_smiles).sum() == 0\n\n    smiles = train_raw[train_raw['protein_name'] == 'BRD4']['molecule_smiles'].values\n    smiles_enc = process_smiles(smiles)\n    \n    train = pd.DataFrame(smiles_enc, columns=[f'enc{i}' for i in range(142)])\n    for protein_name in ['BRD4', 'HSA', 'sEH']:\n        train[f'bind_{protein_name}'] = train_raw[train_raw['protein_name'] == protein_name]['binds'].values\n    \n    train.to_parquet('train_enc.parquet')\n    \n    smiles = test_raw['molecule_smiles'].values\n    smiles_enc = process_smiles(smiles)\n    \n    test = pd.DataFrame(smiles_enc, columns=[f'enc{i}' for i in range(142)])\n    test.to_parquet('test_enc.parquet')\n\nelse:\n    train = pd.read_parquet('/kaggle/input/belka-enc-dataset/train_enc.parquet')\n    test = pd.read_parquet('/kaggle/input/belka-enc-dataset/test_enc.parquet')","metadata":{"execution":{"iopub.status.busy":"2024-06-29T12:08:56.17146Z","iopub.execute_input":"2024-06-29T12:08:56.171887Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}