{"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":"nvidiaTeslaT4","dataSources":[{"sourceId":118765,"databundleVersionId":15231210,"sourceType":"competition"}],"dockerImageVersionId":31234,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport pandas as pd\n\nINPUT_PATH = \"/kaggle/input/stanford-rna-3d-folding-2/test_sequences.csv\"\nOUTPUT_PATH = \"submission.csv\"\nN_STRUCTURES = 5  \ndef generate_structure(length, s):\n    return [(i+1, float(i), 0.0 + 0.1*s, 0.0) for i in range(length)]\ntry:\n    test_df = pd.read_csv(INPUT_PATH)\nexcept Exception as e:\n    raise RuntimeError(f\"Failed to read {INPUT_PATH}: {e}\")\ncols = [c.lower() for c in test_df.columns]\nif \"id\" not in cols or \"sequence\" not in cols:\n    print(\"Original columns:\", list(test_df.columns))\n    mapping_candidates = {}\n    for c in test_df.columns:\n        lc = c.lower()\n        if lc in (\"sequence_id\", \"seq_id\", \"name\"):\n            mapping_candidates[c] = \"id\"\n        if lc in (\"seq\", \"rna_sequence\", \"sequence_str\"):\n            mapping_candidates[c] = \"sequence\"\n    if mapping_candidates:\n        test_df = test_df.rename(columns=mapping_candidates)\n        print(\"Renamed columns:\", mapping_candidates)\n    else:\n        try:\n            df_no_header = pd.read_csv(INPUT_PATH, header=None)\n            if df_no_header.shape[1] >= 2:\n                df_no_header = df_no_header.iloc[:, :2]\n                df_no_header.columns = [\"id\", \"sequence\"]\n                test_df = df_no_header\n                print(\"Read file with header=None and assigned columns ['id','sequence']\")\n            else:\n                raise RuntimeError(\"File has fewer than 2 columns; cannot assign id and sequence.\")\n        except Exception as e:\n            raise RuntimeError(\"Could not infer id/sequence columns. Columns found: \"\n                               f\"{list(test_df.columns)}; attempted fallback error: {e}\")\n\nif \"id\" not in test_df.columns or \"sequence\" not in test_df.columns:\n    col_map = {}\n    for c in test_df.columns:\n        if c.lower() == \"id\":\n            col_map[c] = \"id\"\n        if c.lower() == \"sequence\":\n            col_map[c] = \"sequence\"\n    if col_map:\n        test_df = test_df.rename(columns=col_map)\n\nif \"id\" not in test_df.columns or \"sequence\" not in test_df.columns:\n    raise RuntimeError(f\"Required columns 'id' and 'sequence' not found. Columns: {list(test_df.columns)}\")\n\nrows = []\nfor _, row in test_df.iterrows():\n    seq_id = row[\"id\"]\n    sequence = row[\"sequence\"]\n    seq_len = len(sequence) if pd.notna(sequence) else 0\n\n    for s in range(1, N_STRUCTURES + 1):\n        coords = generate_structure(seq_len, s)\n        for residue_index, x, y, z in coords:\n            rows.append({\n                \"id\": seq_id,\n                \"structure\": s,\n                \"residue_index\": residue_index,\n                \"x\": x,\n                \"y\": y,\n                \"z\": z\n            })\n\nsubmission_df = pd.DataFrame(rows, columns=[\"id\", \"structure\", \"residue_index\", \"x\", \"y\", \"z\"])\nsubmission_df.to_csv(OUTPUT_PATH, index=False)\nprint(f\"Saved submission to {OUTPUT_PATH}. Rows: {len(submission_df)}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-01-09T04:12:17.782528Z","iopub.execute_input":"2026-01-09T04:12:17.782865Z","iopub.status.idle":"2026-01-09T04:12:19.077287Z","shell.execute_reply.started":"2026-01-09T04:12:17.782834Z","shell.execute_reply":"2026-01-09T04:12:19.076532Z"}},"outputs":[],"execution_count":null}]}