{"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.12.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import csv, os\nfrom pathlib import Path\n\nROOT = Path(\"/kaggle/input/competitions/rsna-knee-abnormality-detection\")\nsample = ROOT / \"sample_submission.csv\"\nif not sample.exists():\n    sample = ROOT / \"sample_submission.csv\"\ncandidate = [{'StudyInstanceUID': '1.2.826.0.1.3680043.8.498.10047035057544427318018579121635276191', 'ACL': '0.33333333333333331', 'MCL': '0.3333333333333333', 'Medial Meniscus': '0.66666666666666663', 'Lateral Meniscus': '0.3333333333333333', 'Medial OA': '1.0', 'Lateral OA': '0.33333333333333331', 'PF OA': '0.33333333333333331', 'Effusion': '0.6666666666666666', 'Synovitis': '0.33333333333333331', \"Baker's\": '1', 'Contusion': '0.3333333333333333', 'Fracture': '0.3333333333333333'}, {'StudyInstanceUID': '1.2.826.0.1.3680043.8.498.10062861783145312629332250977456991776', 'ACL': '0.66666666666666663', 'MCL': '0.6666666666666666', 'Medial Meniscus': '1', 'Lateral Meniscus': '1.0', 'Medial OA': '0.3333333333333333', 'Lateral OA': '1', 'PF OA': '0.66666666666666663', 'Effusion': '1.0', 'Synovitis': '1', \"Baker's\": '0.66666666666666663', 'Contusion': '1.0', 'Fracture': '1.0'}, {'StudyInstanceUID': '1.2.826.0.1.3680043.8.498.10067514707072572280263481548497591402', 'ACL': '1', 'MCL': '1.0', 'Medial Meniscus': '0.33333333333333331', 'Lateral Meniscus': '0.6666666666666666', 'Medial OA': '0.6666666666666666', 'Lateral OA': '0.66666666666666663', 'PF OA': '1', 'Effusion': '0.3333333333333333', 'Synovitis': '0.66666666666666663', \"Baker's\": '0.33333333333333331', 'Contusion': '0.6666666666666666', 'Fracture': '0.6666666666666666'}]\nby_uid = {str(row[\"StudyInstanceUID\"]): row for row in candidate}\nwith sample.open(newline=\"\", encoding=\"utf-8\") as handle:\n    template = list(csv.DictReader(handle))\nif not template:\n    raise RuntimeError(\"empty sample submission\")\nfields = list(template[0])\nif \"StudyInstanceUID\" not in fields:\n    raise RuntimeError(\"missing StudyInstanceUID\")\noutput = []\nfor row in template:\n    uid = str(row[\"StudyInstanceUID\"])\n    if uid not in by_uid:\n        raise RuntimeError(f\"candidate does not cover {uid}\")\n    output.append({field: by_uid[uid][field] for field in fields})\nwith Path(\"/kaggle/working/submission.csv\").open(\"w\", newline=\"\", encoding=\"utf-8\") as handle:\n    writer = csv.DictWriter(handle, fieldnames=fields)\n    writer.writeheader()\n    writer.writerows(output)\nprint(\"v6 overlay submission written\", len(output), \"rows\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-09-10T12:59:41.757328Z","iopub.execute_input":"2026-09-10T12:59:41.757644Z","iopub.status.idle":"2026-09-10T12:59:41.80101Z","shell.execute_reply.started":"2026-09-10T12:59:41.757618Z","shell.execute_reply":"2026-09-10T12:59:41.800449Z"}},"outputs":[],"execution_count":null}]}