{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":118765,"databundleVersionId":15231210,"sourceType":"competition"}],"dockerImageVersionId":31260,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# ============================================\n# CELL 1: FINAL FIXED SUBMISSION\n# ============================================\nimport pandas as pd\nimport numpy as np\nimport os\n\nprint(\"=\"*50)\nprint(\"CREATING FINAL FIXED SUBMISSION\")\nprint(\"=\"*50)\n\n# Load real test data\ntry:\n    test_df = pd.read_csv(\"/kaggle/input/competitions/stanford-rna-3d-folding-2/test_sequences.csv\")\n    print(f\"✅ Loaded {len(test_df)} real sequences\")\n    test_data = test_df.to_dict('records')\nexcept:\n    print(\"❌ Could not load test data\")\n    raise\n\n# Create submission\nrows = []\nfor item in test_data:\n    target_id = item['target_id']\n    sequence = item['sequence']\n    \n    for pred_num in range(1, 6):\n        for res_idx, nt in enumerate(sequence):\n            res_num = res_idx + 1\n            \n            # Simple helix coordinates\n            angle = np.radians(res_idx * 32.7 + pred_num * 10)\n            \n            # Create ONE row with ALL 15 coordinate columns\n            row = {\n                'ID': f\"{target_id}_{pred_num}\",\n                'resname': nt,\n                'resid': res_num,\n                'x_1': 8.0 * np.cos(angle),\n                'y_1': 8.0 * np.sin(angle),\n                'z_1': res_idx * 2.8,\n                'x_2': 8.0 * np.cos(angle + 0.1),\n                'y_2': 8.0 * np.sin(angle + 0.1),\n                'z_2': res_idx * 2.8 + 0.1,\n                'x_3': 8.0 * np.cos(angle + 0.2),\n                'y_3': 8.0 * np.sin(angle + 0.2),\n                'z_3': res_idx * 2.8 - 0.1,\n                'x_4': 8.0 * np.cos(angle - 0.1),\n                'y_4': 8.0 * np.sin(angle - 0.1),\n                'z_4': res_idx * 2.8 + 0.2,\n                'x_5': 8.0 * np.cos(angle - 0.2),\n                'y_5': 8.0 * np.sin(angle - 0.2),\n                'z_5': res_idx * 2.8 - 0.2,\n            }\n            rows.append(row)\n\n# Create DataFrame\ndf = pd.DataFrame(rows)\n\n# CORRECT column order: ID, resname, resid, then x1,y1,z1, x2,y2,z2, ... x5,y5,z5\ncorrect_cols = ['ID', 'resname', 'resid']\nfor k in range(1, 6):\n    correct_cols.extend([f'x_{k}', f'y_{k}', f'z_{k}'])\n\n# Reorder columns\ndf = df[correct_cols]\n\n# Save\ndf.to_csv('/kaggle/working/submission.csv', index=False)\n\nprint(f\"\\n✅ Created submission with {len(df)} rows\")\nprint(f\"✅ File size: {os.path.getsize('/kaggle/working/submission.csv') / 1024:.2f} KB\")\nprint(f\"\\n✅ Columns: {list(df.columns)}\")\nprint(f\"\\n✅ Expected rows: 48,810\")\nif len(df) == 48810:\n    print(\"✅ Rows match expected!\")\n    \nprint(\"\\n\" + \"=\"*50)\nprint(\"✅✅✅ READY TO SUBMIT! ✅✅✅\")\nprint(\"=\"*50)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-02-18T10:17:44.309756Z","iopub.execute_input":"2026-02-18T10:17:44.310462Z","iopub.status.idle":"2026-02-18T10:17:46.09043Z","shell.execute_reply.started":"2026-02-18T10:17:44.310434Z","shell.execute_reply":"2026-02-18T10:17:46.089733Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# ============================================\n# CELL 1: FINAL SUBMISSION - EXACT COLUMNS\n# ============================================\nimport pandas as pd\nimport numpy as np\nimport os\n\nprint(\"=\"*50)\nprint(\"CREATING FINAL SUBMISSION\")\nprint(\"=\"*50)\n\n# Load test data\ntest_df = pd.read_csv(\"/kaggle/input/competitions/stanford-rna-3d-folding-2/test_sequences.csv\")\nprint(f\"✅ Loaded {len(test_df)} sequences\")\n\n# Create submission rows\nrows = []\nfor _, row in test_df.iterrows():\n    target_id = row['target_id']\n    sequence = row['sequence']\n    \n    for pred_num in range(1, 6):\n        for res_idx, nt in enumerate(sequence):\n            res_num = res_idx + 1\n            angle = np.radians(res_idx * 32.7 + pred_num * 10)\n            \n            rows.append({\n                'ID': f\"{target_id}_{pred_num}\",\n                'resname': nt,\n                'resid': res_num,\n                'x_1': 8.0 * np.cos(angle),\n                'y_1': 8.0 * np.sin(angle),\n                'z_1': res_idx * 2.8,\n                'x_2': 8.0 * np.cos(angle + 0.1),\n                'y_2': 8.0 * np.sin(angle + 0.1),\n                'z_2': res_idx * 2.8 + 0.1,\n                'x_3': 8.0 * np.cos(angle + 0.2),\n                'y_3': 8.0 * np.sin(angle + 0.2),\n                'z_3': res_idx * 2.8 - 0.1,\n                'x_4': 8.0 * np.cos(angle - 0.1),\n                'y_4': 8.0 * np.sin(angle - 0.1),\n                'z_4': res_idx * 2.8 + 0.2,\n                'x_5': 8.0 * np.cos(angle - 0.2),\n                'y_5': 8.0 * np.sin(angle - 0.2),\n                'z_5': res_idx * 2.8 - 0.2,\n            })\n\n# Create DataFrame\ndf = pd.DataFrame(rows)\n\n# EXACT columns from competition\nexact_columns = [\n    'ID', 'resname', 'resid',\n    'x_1', 'y_1', 'z_1',\n    'x_2', 'y_2', 'z_2',\n    'x_3', 'y_3', 'z_3',\n    'x_4', 'y_4', 'z_4',\n    'x_5', 'y_5', 'z_5'\n]\n\ndf = df[exact_columns]\n\n# Save\ndf.to_csv('/kaggle/working/submission.csv', index=False)\n\n# Final verification\nprint(f\"\\n✅ Rows: {len(df)}\")\nprint(f\"✅ Columns: {list(df.columns)}\")\nprint(f\"✅ Column count: {len(df.columns)}\")\nprint(f\"\\n✅ First row sample:\")\nprint(df.iloc[0].to_dict())\n\nprint(\"\\n\" + \"=\"*50)\nprint(\"✅✅✅ READY TO SUBMIT! ✅✅✅\")\nprint(\"=\"*50)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-02-18T10:25:05.770362Z","iopub.execute_input":"2026-02-18T10:25:05.771093Z","iopub.status.idle":"2026-02-18T10:25:07.572881Z","shell.execute_reply.started":"2026-02-18T10:25:05.771064Z","shell.execute_reply":"2026-02-18T10:25:07.572139Z"}},"outputs":[],"execution_count":null}]}