{"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.12"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":87793,"databundleVersionId":11403143,"sourceType":"competition"},{"sourceId":10855324,"sourceType":"datasetVersion","datasetId":6742586},{"sourceId":10880419,"sourceType":"datasetVersion","datasetId":6760509},{"sourceId":11065669,"sourceType":"datasetVersion","datasetId":6889817},{"sourceId":11111396,"sourceType":"datasetVersion","datasetId":6921394},{"sourceId":11891512,"sourceType":"datasetVersion","datasetId":7474323}],"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true},"papermill":{"default_parameters":{},"duration":10.055796,"end_time":"2025-03-21T04:01:21.982705","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2025-03-21T04:01:11.926909","version":"2.6.0"}},"nbformat_minor":4,"nbformat":4,"cells":[{"id":"185e5449","cell_type":"code","source":"from datetime import datetime\nimport pytz\nimport pandas as pd\nprint('LOGGING TIME OF START:',  datetime.strftime(datetime.now(pytz.timezone('Asia/Singapore')), \"%Y-%m-%d %H:%M:%S\"))\n\n\ntry:\n    import Bio\nexcept:\n    pass\n    #for drfold2 --------\n    #!pip install biopython\n    #!pip install /kaggle/input/biopython/biopython-1.85-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\n\nprint('PIP INSTALL OK !!!!')","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.execute_input":"2025-03-21T04:01:14.812506Z","iopub.status.busy":"2025-03-21T04:01:14.812013Z","iopub.status.idle":"2025-03-21T04:01:14.872551Z","shell.execute_reply":"2025-03-21T04:01:14.871198Z"},"papermill":{"duration":0.066818,"end_time":"2025-03-21T04:01:14.874549","exception":false,"start_time":"2025-03-21T04:01:14.807731","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"id":"992c587f","cell_type":"code","source":"import os,sys\n\nimport pandas as pd\npd.set_option('display.max_columns', 20)\npd.set_option('display.expand_frame_repr', False)\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom timeit import default_timer as timer\nimport re\n\nimport matplotlib \nimport matplotlib.pyplot as plt\n\n\n# helper--\nclass dotdict(dict):\n\t__setattr__ = dict.__setitem__\n\t__delattr__ = dict.__delitem__\n\n\tdef __getattr__(self, name):\n\t\ttry:\n\t\t\treturn self[name]\n\t\texcept KeyError:\n\t\t\traise AttributeError(name)\n\ndef time_to_str(t, mode='min'):\n\tif mode=='min':\n\t\tt  = int(t)/60\n\t\thr = t//60\n\t\tmin = t%60\n\t\treturn '%2d hr %02d min'%(hr,min) \n\telif mode=='sec':\n\t\tt   = int(t)\n\t\tmin = t//60\n\t\tsec = t%60\n\t\treturn '%2d min %02d sec'%(min,sec)\n\n\telse:\n\t\traise NotImplementedError\n\ndef gpu_memory_use():\n    if torch.cuda.is_available():\n        device = torch.device(0)\n        free, total = torch.cuda.mem_get_info(device)\n        used= (total - free) / 1024 ** 3\n        return int(round(used))\n    else:\n        return 0\n\ndef set_aspect_equal(ax):\n\tx_limits = ax.get_xlim()\n\ty_limits = ax.get_ylim()\n\tz_limits = ax.get_zlim()\n\n\t# Compute the mean of each axis\n\tx_middle = np.mean(x_limits)\n\ty_middle = np.mean(y_limits)\n\tz_middle = np.mean(z_limits)\n\n\t# Compute the max range across all axes\n\tmax_range = max(x_limits[1] - x_limits[0],\n\t\t\t\t\ty_limits[1] - y_limits[0],\n\t\t\t\t\tz_limits[1] - z_limits[0]) / 2.0\n\n\t# Set the new limits to ensure equal scaling\n\tax.set_xlim(x_middle - max_range, x_middle + max_range)\n\tax.set_ylim(y_middle - max_range, y_middle + max_range)\n\tax.set_zlim(z_middle - max_range, z_middle + max_range)\n\n\nprint('torch',torch.__version__)\nprint('torch.cuda',torch.version.cuda)\n\nprint('IMPORT OK!!!')","metadata":{"execution":{"iopub.execute_input":"2025-03-21T04:01:14.881952Z","iopub.status.busy":"2025-03-21T04:01:14.881572Z","iopub.status.idle":"2025-03-21T04:01:20.248751Z","shell.execute_reply":"2025-03-21T04:01:20.247430Z"},"papermill":{"duration":5.372713,"end_time":"2025-03-21T04:01:20.250884","exception":false,"start_time":"2025-03-21T04:01:14.878171","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"id":"a23d2ac0-e0bf-444b-abea-aa69fa9a0249","cell_type":"code","source":"d = pd.read_csv(\"/kaggle/input/submission/submission (1).csv\")","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"id":"aff623a9","cell_type":"code","source":"MODE = 'submit' #'local' # submit\n\nDATA_KAGGLE_DIR = '/kaggle/input/stanford-rna-3d-folding'\nif MODE == 'local':\n    valid_df = pd.read_csv(f'{DATA_KAGGLE_DIR}/validation_sequences.csv')\n    label_df = pd.read_csv(f'{DATA_KAGGLE_DIR}/validation_labels.csv')\n    label_df['target_id'] = label_df['ID'].apply(lambda x: '_'.join(x.split('_')[:-1]))\n\n    valid_df = valid_df.iloc[[0,1,2]]\n\nif MODE == 'submit':\n\tvalid_df = pd.read_csv(f'{DATA_KAGGLE_DIR}/test_sequences.csv')\n\t#valid_df = pd.read_csv(f'/kaggle/input/hengck23-top-data/casp16_top1_sequence_df.csv')\n\nprint('len(valid_df)',len(valid_df))\nprint(valid_df.iloc[0])\nprint('')\n\n\n# cfg = dotdict(\n#     num_conf = 5,\n#     max_length=480,\n# )\n\nNUM_CONF=5\nMAX_LENGTH=480\nDEVICE='cuda' #'cpu'\n\nprint('MODE:', MODE)\nprint('SETTING OK!!!')","metadata":{"execution":{"iopub.execute_input":"2025-03-21T04:01:20.258144Z","iopub.status.busy":"2025-03-21T04:01:20.257566Z","iopub.status.idle":"2025-03-21T04:01:20.284116Z","shell.execute_reply":"2025-03-21T04:01:20.282808Z"},"papermill":{"duration":0.032476,"end_time":"2025-03-21T04:01:20.286222","exception":false,"start_time":"2025-03-21T04:01:20.253746","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"id":"d0529d6f","cell_type":"code","source":"# ###########################################################3\n \n# # data helper\n# def make_data(seq):\n#     aa_type = parse_seq(seq)\n#     base = Get_base(seq, BASE_COOR)\n#     seq_idx = np.arange(len(seq)) + 1\n\n#     msa = aa_type[None, :]\n#     msa = torch.from_numpy(msa)\n#     msa = torch.cat([msa, msa], 0) #???\n#     msa = F.one_hot(msa.long(), 6).float()\n\n#     base_x  = torch.from_numpy(base).float()\n#     seq_idx = torch.from_numpy(seq_idx).long()\n#     return msa, base_x, seq_idx\n    \n# def make_dummy_solution():\n#     solution=dotdict()\n#     for i, row in valid_df.iterrows():\n#         target_id = row.target_id\n#         sequence = row.sequence\n#         solution[target_id]=dotdict(\n#             target_id=target_id,\n#             sequence=sequence,\n#             coord=[\n#                 np.zeros((len(sequence),3), dtype=np.float32) for j in range(5)\n#             ],\n#         )\n#     return solution\n\n# def solution_to_submit_df(solution):\n#     submit_df = []\n#     for k,s in solution.items():\n#         df = coord_to_df(s.sequence, s.coord, s.target_id)\n#         submit_df.append(df)\n    \n#     submit_df = pd.concat(submit_df)\n#     return submit_df\n \n\n# def coord_to_df(sequence, coord, target_id):\n#     L = len(sequence)\n#     df = pd.DataFrame()\n#     df['ID'] = [f'{target_id}_{i + 1}' for i in range(L)]\n#     df['resname'] = [s for s in sequence]\n#     df['resid'] = [i + 1 for i in range(L)]\n\n#     num_coord = len(coord)\n#     for j in range(num_coord):\n#         df[f'x_{j+1}'] = coord[j][:, 0]\n#         df[f'y_{j+1}'] = coord[j][:, 1]\n#         df[f'z_{j+1}'] = coord[j][:, 2]\n#     return df\n\n# ################### start here !!! #######################################################3\n# #---\n# # import pickle\n# # top_file =\\\n# # '/kaggle/input/hengck23-top-data/af3-casp16_out.pkl'\n# #     #'/kaggle/input/hengck23-top-data/vfold-casp16_out.pkl'\n# #     #'/kaggle/input/hengck23-top-data/drfold2-casp16_out.pkl'\n# # with open(top_file, 'rb') as f:\n# # \tCASP_TOP = pickle.load(f)\n# # print('CASP_TOP read !!!!!')\n# #----\n\n# solution = make_dummy_solution()\n# #----\n# for i,row in valid_df.iterrows():\n#     target_id = row.target_id\n#     sequence = row.sequence\n#     #sequence='AAGUACCCUCCAAGCCCUACAGGUUGGAAGAGGGGGCUAUCAGUCCUGUAGGCAGACUC'\n#     #if len(sequence)<200: continue    \n#     #if len(sequence)>400: continue\n    \n#     top = CASP_TOP.get(sequence,None)\n#     if top is None: continue\n#     if len(top)==0: continue\n    \n#     #print(top)\n#     print('\\r', i, len(top), target_id, sequence[:10] + '...','found!', end='', flush=True)\n \n#     nL = min(len(row.sequence), len(top[0]))\n#     for k in range(len(top)):\n#         solution[target_id].coord[k][:nL]=top[k][:nL]\n        \n# print('')\n# #----\n\n\n# submit_df = solution_to_submit_df(solution)\n# submit_df.to_csv(f'submission.csv', index=False)\n# print(submit_df)\n# print('SUBMIT OK!!!!!!')\n# print('')\n \n\n\n","metadata":{"execution":{"iopub.execute_input":"2025-03-21T04:01:20.292702Z","iopub.status.busy":"2025-03-21T04:01:20.292363Z","iopub.status.idle":"2025-03-21T04:01:20.452456Z","shell.execute_reply":"2025-03-21T04:01:20.450833Z"},"papermill":{"duration":0.165616,"end_time":"2025-03-21T04:01:20.454516","exception":false,"start_time":"2025-03-21T04:01:20.288900","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"id":"e80a3ce9-264e-4142-83bd-4a5f598a9417","cell_type":"code","source":"d.to_csv('submission.csv', index=False)","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}